2011-12-13 111 views
2

我有小桌子SQL Server日期时间指示今天和昨天

Create Table TestDates 
(
    TestDateId int identity (1,1), 
    RunDateTime DateTime 
) 

我会插入一些值表

Insert into TestDates 
(RunDateTime) 
Values 
(getdate()) 

Insert into TestDates 
(RunDateTime) 
Values 
(DATEADD(DAY, -1, GETDATE())) 

Insert into TestDates 
(RunDateTime) 
Values 
(DATEADD(DAY, -2, GETDATE())) 

Insert into TestDates 
(RunDateTime) 
Values 
(DATEADD(DAY, -3, GETDATE())) 

Insert into TestDates 
(RunDateTime) 
Values 
(DATEADD(Hour, -34, GETDATE())) 

Insert into TestDates 
(RunDateTime) 
Values 
(DATEADD(Hour, -12, GETDATE())) 

我设法执行这使我唯一的一次不同的查询

SELECT DISTINCT 
DATENAME(hour, RunDateTime) + ':' + 
DATENAME(mi, RunDateTime) AS DistinctDate 
from TestDates 

但我需要指出今天或昨天出现的时间

例如

DistinctDate IsToday IsYesterday 

10:33   N   Y 
20:31   Y   N 
8:33   N   N 

请帮

+3

前一天被称为**昨天** – 2011-12-13 21:48:54

回答

3

可以使用一个case语句用DATEDIFF。

SELECT DISTINCT 
DATENAME(hour, RunDateTime) + ':' + 
DATENAME(mi, RunDateTime) AS DistinctDate, 
CASE WHEN DATEDIFF(day, RunDateTime, GETDATE()) = 0 THEN 'Y' ELSE 'N' END IsToday, 
CASE WHEN DATEDIFF(day, RunDateTime, GETDATE()) = 1 THEN 'Y' ELSE 'N' END IsYesterday 
from TestDates 
2

一种方法来确定是否今天或昨天的日期是:

SELECT DISTINCT 
     DATENAME(hour, RunDateTime) + ':' + DATENAME(mi, RunDateTime) AS DistinctDate, 
     CASE WHEN DATEPART(day,RunDateTime) = DATEPART(day,GetDate()) THEN 1 
     ELSE 0 END as IsToday 
    FROM TestDates 

另一种方法是:

SELECT DISTINCT 
     DATENAME(hour, RunDateTime) + ':' + DATENAME(mi, RunDateTime) AS DistinctDate, 
     CASE WHEN DATEDIFF(day,RunDateTime,getdate()) = 0 THEN 1 
     ELSE 0 END as IsToday 
    FROM TestDates 

IsToday专栏将指出今天当昨天1点。当你只需要在两者之间进行识别时,这种说法是可行的。

根据您的例子最终的结果是:

DistinctDate IsToday 

10:33   0 
20:31   1 
8:33   0 
+0

你可以发布所有的SQL查询吗? – 2011-12-13 22:04:52