SQL Server DateTime Индикация на сегодня и вчера - PullRequest
2 голосов
/ 14 декабря 2011

У меня есть маленькая таблица

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

Пожалуйста, помогите

Ответы [ 2 ]

3 голосов
/ 14 декабря 2011

Можно использовать регистр с датой.

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 голосов
/ 14 декабря 2011

Один метод, чтобы определить, является ли дата сегодняшним или вчерашним днем:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...