Количество дней между двумя датами — ANSI SQL
-
05-07-2019 - |
Вопрос
Мне нужен способ определить количество дней между двумя датами в SQL.
Ответ должен быть в формате ANSI SQL.
Решение
ANSI SQL-92 определяет DATE - DATE как возвращающий тип INTERVAL. Предполагается, что вы сможете извлечь скаляры из INTERVALS, используя тот же метод, что и извлекать их из DATE, используя & # 8211; достаточно достаточно & # 8211; функция ЭКСТРАКТ (4.5.3).
< извлечь выражение > работает на datetime или интервал и возвращает точное числовое значение, представляющее значение одного компонента даты и времени или интервал.
Однако, это очень плохо реализовано в большинстве баз данных. Вы, вероятно, застряли, используя что-то специфичное для базы данных. DATEDIFF довольно хорошо реализован на разных платформах.
Вот " real " способ сделать это.
SELECT EXTRACT(DAY FROM DATE '2009-01-01' - DATE '2009-05-05') FROM DUAL;
Удачи!
Другие советы
Я не могу вспомнить использование СУБД, которая не поддерживала DATE1-DATE2 и SQL 92 , похоже, согласен.
Я считаю, что стандарт SQL-92 поддерживает вычитание двух дат с помощью оператора '-'.
SQL 92 поддерживает следующий синтаксис:
t.date_1 - t.date_2
Функция EXTRACT также соответствует стандарту ANSI, но она не поддерживается SQL Server.Пример:
ABS(EXTRACT(DAY FROM t.date_1) - EXTRACT(DAY FROM t.date_2)
Обертывание вычислений в функцию абсолютного значения гарантирует, что значение будет положительным, даже если первой датой является меньшая дата.
EXTRACT поддерживается на:
- Оракул 9i+
- MySQL
- Постгрес