Игнорирование элемента времени поля даты и времени - PullRequest
0 голосов
/ 21 декабря 2009

У меня есть поле даты и времени в моей таблице. Я хочу удалить записи, основанные на дате, но меня не интересует элемент времени. Как бы я написал SQL для этого? Я использую MS SQL 2008.

Ответы [ 5 ]

3 голосов
/ 21 декабря 2009

Для лучшего использования индексов я бы пошел на такой подход:

Чтобы удалить все записи за 1 декабря:

DECLARE @DateToDelete DATETIME
SET @DateToDelete = '20091201' 

DELETE FROM MyTable
WHERE MyDateField >= @DateToDelete AND MyDateField < DATEADD(dd, 1, @DateToDelete)

Альтернативы включают в себя:

DELETE FROM MyTable
WHERE CAST(CONVERT(VARCHAR(10), MyDateField, 120) AS DATETIME) = @DateToDelete

, который преобразует каждое значение даты и времени в его часть даты.

Но я бы все-таки пошел своим первоначальным путем, поскольку он позволяет более эффективно выполнять.

1 голос
/ 21 декабря 2009

Уместно ли время в другом месте? Если нет, то вам следует использовать столбец DATE. Если вы не можете, то лучший способ найти часть даты в datetime в предложении WHERE - это использовать диапазон:

... WHERE dateColumn BETWEEN '20091221' and '20091222';

Обратите внимание, что с учетом точности даты и времени 3 мс дата и время, такие как 20091221 23:59:59.999, могут быть приблизительно равны 20091222 00:00:00.000, и это может иногда создавать проблемы.

Существует большая коллекция сообщений в блоге на тему datetime на T-SQL вторник # 001 (хитрости даты / времени): обзор

1 голос
/ 21 декабря 2009

Если вы используете MS SQL 2008, вы можете преобразовать в новый тип DATE

DELETE FROM table WHERE date_filed >= CONVERT(DATE,GETDATE())
0 голосов
/ 21 декабря 2009

Вот для чего дата :

delete from Table where datediff(day,'2009-12-09',date_filled) = 0
0 голосов
/ 21 декабря 2009

Попробуйте это: -

declare @date datetime 
set @date = '2006-11-09'
select @date, dateadd(ms, -1, DATEADD(dd,1,@date))
delete from login 
where datecreated between @date AND dateadd(ms, -1, DATEADD(dd,1,@date))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...