SQL Server: как выбрать строки, которые были вставлены в тот же день? - PullRequest
3 голосов
/ 06 декабря 2011

У меня есть цикл, который проходит через некоторые записи.В цикле я получаю дату создания, и мне нужно найти, были ли записи вставлены в тот же день.Так, например, если creation date = 2011-08-31 21:19:14.345, мне нужно выбрать все строки, где дата создания находится между 2011-08-31 00:00:00.000 и 2011-08-31 23:59:59.999

Как мне сделать это с SQL?

Ответы [ 3 ]

4 голосов
/ 06 декабря 2011

Чтобы поймать все время в этот день, сделайте следующее:

SELECT * FROM MyTable
WHERE DateCreated >= @TheDate AND DateCreated < DATEADD(day, 1, @TheDate)

Где @TheDate должна быть чистой датой без времени. Он работает даже тогда, когда DateCreated имеет временную часть очень близко к полуночи.

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

Без каких-либо других деталей схемы, и если это SQL Server 2K8 +, вы можете сделать это:

DECLARE @CreationDate Date = '2011-08-31';

SELECT *
FROM SomeTable
WHERE CONVERT(Date, CreationDate) = @CreationDate;

Преобразовав в date вместо работы с datetime, вы потеряете компонент времении "нормализуйте", как вы сравниваете значения.

Другой способ потерять компонент времени для целей сравнения:

DECLARE @CreationDate DateTime;
SELECT @CreationDate = '2011-08-31 21:19:14.345';

SELECT @CreationDate; -- 2011-08-31 21:19:14.345
SELECT @CreationDate = CONVERT(DateTime, FLOOR(CONVERT(Float, @CreationDate)));
SELECT @CreationDate; -- 2011-08-31 00:00:00.000

Вы бы использовали это, если у вас нетdate тип данных.

0 голосов
/ 06 декабря 2011

Вы можете попробовать это:

SELECT * FROM SomeTable  
WHERE   
DAY(TDATE) = DAY(CreationDate)  
AND  
MONTH(TDATE) = MONTH(CreationDate)  
AND  
YEAR(TDATE) = YEAR(CreationDate)
...