Количество дней между двумя датами - ANSI SQL - PullRequest
5 голосов
/ 26 ноября 2009

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

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

Ответы [ 4 ]

6 голосов
/ 26 ноября 2009

ANSI SQL-92 определяет DATE - DATE как возвращающий тип INTERVAL. Предполагается, что вы сможете извлечь скаляры из INTERVALS, используя тот же метод, что и извлекать их из DATE, используя & ndash; достаточно хорошо & ndash; функция ЭКСТРАКТ (4.5.3).

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

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

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

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

Удачи!

3 голосов
/ 26 ноября 2009

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

1 голос
/ 26 ноября 2009

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

0 голосов
/ 26 ноября 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)

Завершение вычисления в функцию абсолютного значения гарантирует, что значение получится положительным, даже если первая дата будет меньшей.

ЭКСТРАКТ поддерживается на:

  • Oracle 9i +
  • MySQL
  • Postgres
...