我想存储给定表的日期间隔值,假设开始日期是2016年7月1日,结束日期是2017年6月30日。最简单的方法是将值设置为原样(在SQL Server中,datetime值2016年7月1日存储为01/07/2016 00:00:00)。然后,当我想验证某个日期是否在该间隔的范围内时,我只会使用BETWEEN子句,例如:
WHERE this_date BETWEEN start_date AND end_date
但是,如果this_date设置为30/06/2017 10:00:00,则上述语句将返回false。为了解决这个问题,我想我会将WHERE子句更改为:
WHERE this_date BETWEEN start_date AND dateadd(ss, -1, datead(dd,1,end_date))
这样,end_date值将设置为30/06/2017 23:59:59并且SQL子句将返回true。
另一种解决方法是只存储包含时间签名的end_date值,即30/06/2017 23:59:59。这样,WHERE子句不需要更改,语句将返回true。
我倾向于第二种方法,但我想听听你的意见。你会说第二种方法更自然吗?是否存在不利的情况?如果我使用第一种方法,是否有更好的方法来验证日期间隔?
非常感谢您的意见!
答案 0 :(得分:0)
您需要使用存储过程来满足您的需求,例如:
if(date>thisdate)
your query here;
else
another query here;
给定逻辑;