2016-11-25 1 views
0

Я хочу сохранить значение интервала даты для данной таблицы, предположим, что дата начала 1 июля 2016 года, а дата окончания - 30 июня 2017 года. Самый простой способ - установить значение как есть (в SQL Server значение даты и времени 1 июля 2016 года хранится как 01/07/2016 00:00:00). Затем, когда я хочу, чтобы проверить, если определенная дата находится в пределах этого интервала, то я бы просто использовать BETWEEN пункта, например:Как хранить и проверять интервал дат в SQL Server?

WHERE this_date BETWEEN start_date AND end_date 

Однако, если this_date установлен на значение 30/06/2017 10:00:00, вышеуказанное утверждение вернет false. Чтобы справиться с этим, я думаю, я бы изменить статью, где это:

WHERE this_date BETWEEN start_date AND dateadd(ss, -1, datead(dd,1,end_date)) 

Таким образом, значение end_date будет установлен в 30/06/2017 23:59:59 и пункт SQL будет возвращена истина.

Другой способ справиться с этим - просто сохранить значение end_date, содержащее подпись времени, т.е. 30/06/2017 23:59:59. Таким образом, предложение WHERE не нуждается в изменении, и оператор вернет true.

Я склоняюсь к второму подходу, но хотел бы услышать ваше мнение. Не могли бы вы сказать, что второй подход более естественный? Есть ли случаи, когда это не было бы выгодно? Есть ли лучший способ проверить интервал дат, если я использую первый подход?

Ваше мнение очень ценится!

+0

вместо сохранения '2017-07-30 00: 00: 00' в вашем диапазоне дат, вы можете сохранить' 2017-07-30 23: 59: 59'? Извините, я просто понимаю, был ваш второй подход ... да, сделайте так, чтобы вам не приходилось вычислять в каждом запросе. –

ответ

0

Вы должны использовать Хранимая процедура, чтобы удовлетворить ваши потребности, как:

if(date>thisdate) 
your query here; 
else 
another query here; 

данной логики;