Мне нужен способ определить количество дней между двумя датами в SQL.
Ответ должен быть в ANSI SQL.
Мне нужен способ определить количество дней между двумя датами в SQL.
Ответ должен быть в ANSI SQL.
ANSI SQL-92 определяет DATE-DATE как возврат типа INTERVAL. Предполагается, что вы сможете извлекать скаляры из ИНТЕРВАЛОВ, используя тот же метод, что и из ДАТ, используя достаточно подходящую функцию ИЗВЛЕЧЕНИЕ (4.5.3).
‹выражение извлечения› работает с датой и временем или интервалом и возвращает точное числовое значение, представляющее значение одного компонента даты и времени или интервала.
Однако это очень плохо реализовано в большинстве баз данных. Вы, вероятно, застряли, используя что-то конкретное для базы данных. DATEDIFF довольно хорошо реализован на разных платформах.
Вот "настоящий" способ сделать это.
SELECT EXTRACT(DAY FROM DATE '2009-01-01' - DATE '2009-05-05') FROM DUAL;
Удачи!
Я не помню, чтобы использовалась СУБД, которая не поддерживала DATE1-DATE2 и SQL 92, похоже, согласен.
SELECT GETDATE() - (GETDATE() - 5)
=› 1900-01-06 00:00:00.000
- person Jonas Elfström; 07.05.2018
getdate() - getdate()
должен возвращать 0
, а не 1900-01-01
в соответствии со стандартом SQL.
- person a_horse_with_no_name; 07.05.2018
Я считаю, что стандарт 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 поддерживается на: