如何将日期值与getDate()结果进行比较



我正在尝试授予和撤销从表中挑选的用户ID的角色。

我正在使用以下查询将一行从主表插入从主表到另一个表的行,但是命令不会将任何行插入从属表中。

Insert into tbl2(userid, role, startdate, expirydate)
Select userid, role, startdate, expirydate 
from  tbl1
where expirydate = Dateadd(day,0, getdate())

如果我使用<=>=上述查询正在工作,但是当我们在tbl1中有多个行时,这无用。

这是因为GETDATE()返回DATETIME值,并且您可能将其与DATE进行比较,因此您有效地比较了这样的值:

SELECT GETDATE() AS DateTimeValue,
       CAST(GETDATE() AS DATE) DateValue;

输出:

DateTimeValue            DateValue
2017-10-04 10:34:35.023  2017-10-04

默认情况下,如果与DATETIME进行比较,则DATE将设置为午夜的时间,例如:2017-10-04 00:00:00.000

这些值与包含的时间不会相等,因此请使用CASTCONVERT获取DATE,没有时间:

where expirydate = Dateadd(day,0, CAST(GETDATE() AS DATE)) 

,尽管看来您不需要WHERE子句上的Dateadd,所以除非进行编辑/示例代码,否则将其删除。因此,也许对此进行编辑:

where expirydate = CAST(GETDATE() AS DATE)

参考

getDate(transact-sql)

返回当前数据库系统时间戳作为DateTime值,而无需数据库时区偏移。此值源自SQL Server正在运行的计算机的操作系统。

最新更新