Как я могу просмотреть исходный код функции?

Это хорошая идея, чтобы генерировать эти даты на лету. Тем не менее, я не чувствую себя комфортно для этого с довольно большим диапазоном, поэтому я получил следующее решение:

  1. Создал таблицу «DatesNumbers», которая будет содержать номера, используемые для расчета дат :

CREATE TABLE DatesNumbers ( i MEDIUMINT NOT NULL, PRIMARY KEY (i) ) COMMENT='Used by Dates view' ;

  1. Настроил таблицу, используя вышеприведенные методы с номерами от -59999 до 40000. Этот диапазон даст мне даты от 59999 дней (~ 164 года) до 40000 дней (109 лет) впереди:

INSERT INTO DatesNumbers SELECT a.i + (10 * b.i) + (100 * c.i) + (1000 * d.i) + (10000 * e.i) - 59999 AS i FROM (SELECT 0 AS i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a , (SELECT 0 AS i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b , (SELECT 0 AS i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c , (SELECT 0 AS i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS d , (SELECT 0 AS i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS e ;

  1. Создал представление «Даты»:

SELECT i , CURRENT_DATE() + INTERVAL i DAY AS Date FROM DatesNumbers

Вот и все.

  • (+) Легко читаемые запросы
  • (+) Нет на лету поколений
  • (+) Дает даты в прошлом и в будущем, и для этого нет НИКАКОГО СОЮЗА, как в этой записи .
  • (+ ) «Только в прошлом» или «только в будущем» даты могут быть отфильтрованы с использованием WHERE i < 0 или WHERE i > 0 (PK)
  • (-) «временная» таблица & amp; вид используется

484
задан MichaelChirico 29 August 2018 в 01:36
поделиться