如何将DATE值与GETDATE()的结果进行比较

时间:2017-10-04 09:19:46

标签: sql-server

我正在尝试为从表中选取的用户ID授予和撤消服务器角色。

每当到期日期临近时,我使用以下查询将主表中的行插入到另一个表中,但是该命令不会将任何行插入到从表中。

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

如果我使用<=>=,则上述查询有效,但如果tbl1中有多行,则无效。

1 个答案:

答案 0 :(得分:2)

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

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

<强>输出:

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

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

这些值不会与所包含的时间相等,因此请使用CASTCONVERT无时间地获得DATE

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

虽然看起来你不需要Dateadd子句上的WHERE,所以删除它除非这是编辑/示例代码。所以也许可以编辑它:

where expirydate = CAST(GETDATE() AS DATE)

<强>参考

GETDATE (Transact-SQL)

  

将当前数据库系统时间戳记作为没有数据库时区偏移量的日期时间值返回。此值派生自运行SQL Server实例的计算机的操作系统。