为什么没有比较sql日期?

时间:2017-06-09 12:00:15

标签: sql sql-server tsql stored-procedures sql-server-2014

我正在比较日期和时间,但它有时无法正常工作

代码:

Select nit_no, workno, convert(datetime,convert(varchar,w.ExpiryDate,106) +  ' ' + w.ExpiryTime), getdate()
from works w
where NIT_No= 3594 and WorkNo=1
and convert(datetime,convert(varchar,w.ExpiryDate,106) +  ' ' + w.ExpiryTime) <= getdate()

值:

convert(datetime,convert(varchar,w.ExpiryDate,106) +  ' ' + w.ExpiryTime)= 2017-06-08 16:50:54.000  
getdate()= 2017-06-08 17:50:54.000

ExpiryDate 属于 DATE 类型,而 ExpiryTime 属于 VARCHAR

它没有正常工作,getdate()小于另一个表达式,而stills返回数据。

更新 我想要做的是将ExpiryDate和ExpiryTime与当前日期时间比较,即Getadate(),如果到期日期和时间小于当前日期时间,则不应显示其他显示。

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

convert(datetime,convert(varchar,w.ExpiryDate,121) +  ' ' + w.ExpiryTime, 121 )

答案 1 :(得分:1)

不是转换为字符并转换回来,只需将expirytime转换为time数据类型,然后将该时间添加到转换为expirydate的{​​{1}}像这样:

datetime

或与select * , expirydatetime = dateadd(millisecond ,datediff(millisecond,0,convert(time(7),w.expirytime)) ,convert(datetime,w.expirydate) ) from works w where dateadd(millisecond ,datediff(millisecond,0,convert(time(7),w.expirytime)) ,convert(datetime,w.expirydate) ) < getdate()

一起使用
datetime2

rextester演示:http://rextester.com/LDY81881