Как определить интервал дат совместимым способом? - PullRequest
1 голос
/ 02 сентября 2011

Я пытаюсь построить запрос SQL, который должен быть выполнен как как на сервере HSQL (v2.2.4), так и на сервере MySQL (v5.1.36) (если он может работать и на DB2 v9, это было бы замечательным бонусом!)

Запрос:

select count(*) from document where current_date - cast(indexing_date as date) <= ?

(здесь current_date - стандартная функция HSQL / MySQL, а indexing_date - столбец с типом datetime, параметр ? заменяется целым числом 20, которое является числом дней).

Проблема в том, что MySQL возвращает разницу между датами как между числами , тогда как HSQL возвращает разницу в днях (что логично, когда вы вычитаете дату из даты).

Также HSQL поддерживает этот синтаксис (но MySQL нет):

select count(*) from document where cast(indexing_date as date) between current_date - 20 day and current_date

пока MySQL нет. Мне известно о DATEDIFF() в MySQL, но, как я уже сказал, решение должно быть совместимым.

Ответы [ 2 ]

2 голосов
/ 02 сентября 2011

HSQLDB также поддерживает это:

select count(*) from document where current_date - cast(indexing_date as date) <= cast(? as interval day)

и

select count(*) from document where cast(indexing_date as date) between current_date - '20' day and current_date

или

select count(*) from document where indexing_date >= current_date - interval '20' day

Также, начиная с версии 2.2.6, HSQLDB поддерживает DATEDIFF(datevaluea, datevalueb), который возвращает количество дней между двумя датами, а также DAYS(datevalue), который возвращает номер дня с начала эпохи.

0 голосов
/ 02 сентября 2011

дБ2:

SELECT COUNT(*) 
FROM document 
WHERE DATE(indexing_date) BETWEEN DATE(DAYS(CURRENT DATE) - 20) AND CURRENT DATE
...