Вопрос

Мне нужен способ определить количество дней между двумя датами в 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
  • Постгрес
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top