我正在尝试授予和撤销从表中挑选的用户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
。
这些值与包含的时间不会相等,因此请使用CAST
或CONVERT
获取DATE
,没有时间:
where expirydate = Dateadd(day,0, CAST(GETDATE() AS DATE))
,尽管看来您不需要WHERE
子句上的Dateadd
,所以除非进行编辑/示例代码,否则将其删除。因此,也许对此进行编辑:
where expirydate = CAST(GETDATE() AS DATE)
参考
getDate(transact-sql)
返回当前数据库系统时间戳作为DateTime值,而无需数据库时区偏移。此值源自SQL Server正在运行的计算机的操作系统。