转换和操作不按预期工作。忽略年份值

时间:2017-11-17 18:25:54

标签: sql sql-server sql-server-2016

我有以下代码:

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天的价值?

2 个答案:

答案 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