我有以下代码:
CONVERT(VARCHAR(20), TimeCard_Date, 101) <
CONVERT(VARCHAR(20), dateadd(dd,-3,getdate()), 101)
原始TimeCard_Date
值= 2018-06-01
GetDate()
return = 11/14/2017
有人可以协助为什么它认为2018年6月设定的Timecard_Date
值小于GetDate()
减去3天的价值?
答案 0 :(得分:0)
转换时,它会转换为varchar数据类型。 06/01/2018
小于11/14/2017
作为varchar,因为它是按字母顺序排列(或按数字?)比较。如果按日期进行比较,则按日期数据类型进行比较,这与您期望的一样。
您可以将代码更改为:
TimeCard_Date < dateadd(dd,-3,getdate())
答案 1 :(得分:0)
您不需要将DATETIME转换为VARCHAR以便比较日期。只需使用:
TimeCard_Date < DATEADD(dd,-3,GETDATE())
另一方面,如果你必须转换它们来做,你必须标准化格式(yyyyMMdd)。您可以查看FORMAT函数https://docs.microsoft.com/en-us/sql/t-sql/functions/format-transact-sql