SQL - 查询未来日期时间的条件

时间:2013-05-11 20:33:21

标签: sql sql-server

我遇到了这个查询的问题。我想不选择已经过SYSTIME当前日期的记录,但是显示未来日期的记录,即使它们已经通过了当前的SYSTIME

SELECT * 
  FROM TABLE
 WHERE DATE>= CONVERT(date, SYSDATETIME())
   AND STARTTIME > CONVERT(time, SYSDATETIME())

这是查询。我知道为什么它不起作用,但我想不出办法去做我上面说的。

3 个答案:

答案 0 :(得分:5)

SELECT * 
FROM TABLE
WHERE 
  (
   (DATE = CONVERT(date, SYSDATETIME() 
    AND STARTTIME > CONVERT(time, SYSDATETIME()
   )
    OR Date > sysdatetime()
  )

您需要一个或条件,因为日期时间在不同的字段中,您必须首先解决今天的日期和时间,然后是所有未来日期,无论时间如何。

答案 1 :(得分:0)

这很大程度上取决于原始数据类型。我们假设它们是datetimedatetime

如果您将来想要任何东西,那么这可行:

where [date] + starttime > sysdatetime()

如果您只想要未来日期,请尝试:

where [date] > cast(sysdatetime() as date)

后者是我如何解释你的问题,但我不能100%确定我的解释是正确的。

答案 2 :(得分:0)

查看DATEADDDATEDIFF函数。

SELECT Date, 
       TomorrowMidnight = Dateadd(dd, Datediff(dd, 0, Getdate()) + 1, 0), 
       TomorrowTimeNow  = Dateadd(dd, 1, Getdate()) 
FROM   dbo.test 
WHERE  date >= Getdate() 
       AND date < Dateadd(dd, Datediff(dd, 0, Getdate()) + 1, 0) 
        OR date > Dateadd(dd, 1, Getdate()) 

这将选择比现在更晚但明天更早的午夜{(1}}以及晚于(现在+ 1天)datetime列的所有行。

DEMO

修改:我忽略了datetime列。也许您刚刚使用它来澄清您的要求,但实际上我确实有一个time列作为我的答案。