Количество дней между двумя датами — ANSI SQL

Мне нужен способ определить количество дней между двумя датами в SQL.

Ответ должен быть в ANSI SQL.


person David Wright    schedule 25.11.2009    source источник


Ответы (4)


ANSI SQL-92 определяет DATE-DATE как возврат типа INTERVAL. Предполагается, что вы сможете извлекать скаляры из ИНТЕРВАЛОВ, используя тот же метод, что и из ДАТ, используя достаточно подходящую функцию ИЗВЛЕЧЕНИЕ (4.5.3).

‹выражение извлечения› работает с датой и временем или интервалом и возвращает точное числовое значение, представляющее значение одного компонента даты и времени или интервала.

Однако это очень плохо реализовано в большинстве баз данных. Вы, вероятно, застряли, используя что-то конкретное для базы данных. DATEDIFF довольно хорошо реализован на разных платформах.

Вот "настоящий" способ сделать это.

SELECT EXTRACT(DAY FROM DATE '2009-01-01' - DATE '2009-05-05') FROM DUAL;

Удачи!

person Monkey Boson    schedule 25.11.2009

Я не помню, чтобы использовалась СУБД, которая не поддерживала DATE1-DATE2 и SQL 92, похоже, согласен.

person Jonas Elfström    schedule 25.11.2009
comment
SQL Server не поддерживает это - person a_horse_with_no_name; 05.05.2018
comment
Кажется, так и есть: SELECT GETDATE() - (GETDATE() - 5) =› 1900-01-06 00:00:00.000 - person Jonas Elfström; 07.05.2018
comment
getdate() - getdate() должен возвращать 0, а не 1900-01-01 в соответствии со стандартом SQL. - person a_horse_with_no_name; 07.05.2018

Я считаю, что стандарт SQL-92 поддерживает вычитание двух дат с помощью оператора «-».

person Andy West    schedule 25.11.2009

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
  • Постгрес
person OMG Ponies    schedule 25.11.2009
comment
Если вы ИЗВЛЕКАЕТЕ из ДАТЫ перед вычитанием, то вычисление работает только в том случае, если две даты находятся в одном и том же месяце. - person Monkey Boson; 26.11.2009
comment
В дополнение к EXTRACT сервер MS SQL также не поддерживает оператор вычитания между двумя датами. Дата типа данных операнда недопустима для оператора вычитания. - person chugadie; 22.08.2013