sql日期比较

时间:2011-06-09 10:59:05

标签: sql sql-server tsql datetime date-comparison

我收到了与此类似的查询

select * 
from stuff where stuff.id = 1 
and start_Dt < = todays_date 
and End_Dt > = todays_date 

我问过那个给我的人为什么要进行日期比较,答案是“开始和结束日期是确保独特记录匹配所必需的”

我很困惑,这种比较不等于任何可能的日期吗?

2 个答案:

答案 0 :(得分:3)

原因是,表格中的ID不是唯一的,即您可以拥有多个stuff.id = 1的行。
但在任何给定时间只有一个是活跃的。使用日期比较检查:它返回当前有效的stuff.id = 1行。这是开始日期过去的行(start_Dt <= todays_date),结束日期是将来(End_Dt >= todays_date)。

答案 1 :(得分:0)

举一个例子来说明daniel-hilgarth的答案,你可能有一张包含加班费率的表格。

这个特殊的例子显示了英国的标准增值税率。

id  StartEffectiveDate  EndEffectiveDate    Rate
1   01/01/1900 00:00    30/11/2008 23:59    17.5
1   01/12/2008 00:00    31/12/2009 23:59    15.0
1   01/01/2010 00:00    03/01/2011 23:59    17.5
1   04/01/2011 00:00    01/01/2099 00:00    20.0

因此,对于今天的比率,这将返回此行

id  StartEffectiveDate  EndEffectiveDate    Rate
1   04/01/2011 00:00    01/01/2099 00:00    20.0

此系统的优点是您可以预先实现此表。因此,在2009年12月,它将使用15.0增值税,但一旦您的计算机日期到达2010年1月1日,自动更改为17.5,然后在日期到2011年1月4日后再次更改。

您也可以用它来计划未来的价格上涨。