2013-05-11 36 views
5

林有这个查询的麻烦查询条件。我要不要选择已通过SYSTIME当前日期记录,但显示未来日期的记录,即使他们已经通过了当前SYSTIMESQL - 为未来的日期时间

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

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

+2

什么RDBMS是什么呢?你是否也想选择过去的记录? – 2013-05-11 20:35:18

+0

SQL Server中,对ASP网站 – user2321895 2013-05-11 20:37:16

+0

没有,我已经花了近日期的照顾,我想只显示当前和未来的记录。但是对于当前的日期记录,仅记录当前系统时间之后的记录以及今天不存在的记录。任何时候。 – user2321895 2013-05-11 20:38:14

回答

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

你需要一个或条件,因为日期时间都在不同的领域,你必须先解决今天的日期和时间,然后所有未来的日期,无论时间。

0

这取决于原始数据类型是什么了很多。让我们假定他们是datetime,或datetime

如果你想在未来的任何事情,那么这个工程:

where [date] + starttime > sysdatetime() 

如果你只想未来日期然后尝试:

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

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

+1

我认为你的意思是'[日期]'而不是'[日期}' – 2013-05-11 20:49:04

+0

我已更正上述错字 – davmos 2016-04-04 10:35:51

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()) 

这将选择一个datetime所有行比现在晚,但早于明天午夜,并用datetime柱晚于(现+ 1日)的所有行。

DEMO

编辑:我忽略了time列。也许你刚刚用它来澄清你的要求,但你实际上有一个datetime列作为我的答案推测。