【问题标题】:Why aren't sql dates getting compared?为什么不比较 sql 日期?
【发布时间】:2017-11-11 10:35:00
【问题描述】:

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

代码:

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 与当前 Datetime 即 Getadate() 进行比较,如果到期日期和时间小于当前日期时间,则不应显示其他显示。

【问题讨论】:

  • 您不必显式转换日期以将它们与字符串进行比较。
  • 解释你想要做什么。样本数据和期望的结果很有帮助。
  • @GordonLinoff 没什么特别的。正是我发布的内容是我正在尝试做的,将 ExpiryDate 和时间与当前进行比较,如果它小于当前日期时间,则不应显示其他显示
  • 价值不少。 IT"S MORE。17:50 是在 16:50 之后。这就是它返回数据的原因。
  • @Covert 2017-06-08 17:50:54.000 >= 2017-06-08 16:50:54.000 这就是为什么这是真的。我不知道你不懂什么

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


【解决方案1】:

无需转换为字符再转换回来,只需将expirytime 转换为time 数据类型,然后将该时间添加到转换为datetimeexpirydate,如下所示:

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

select *
  , expirydatetime2 = dateadd(millisecond
        ,datediff(millisecond,0,convert(time(7),w.expirytime))
        ,convert(datetime2(7),w.expirydate)
      )
from works w
where dateadd(millisecond
        ,datediff(millisecond,0,convert(time(7),w.expirytime))
        ,convert(datetime2(7),w.expirydate)
      ) < sysdatetime()

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

【讨论】:

    【解决方案2】:

    你可以试试这个:

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

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多