忽略日期时间字段的时间元素

时间:2009-12-21 16:45:19

标签: sql-server datetime

我的表格中有一个日期时间字段。我想根据日期删除记录,但我对时间元素不感兴趣。我该如何为此编写SQL?我正在使用MS SQL 2008。

5 个答案:

答案 0 :(得分:3)

为了最好地使用索引,我会选择这种方法:

删除12月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 :(得分:1)

如果您使用MS SQL 2008,那么您可以转换为新的DATE类型

DELETE FROM table WHERE date_filed >= CONVERT(DATE,GETDATE())

答案 2 :(得分:1)

时间与其他地方有关吗?如果没有,那么您应该使用DATE列。如果你不能,那么在WHERE子句中寻找日期时间的最佳方法是使用范围:

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

请注意,如果日期时间准确度为3毫秒,则20091221 23:59:59.999之类的日期时间可能会近似为20091222 00:00:00.000,这有时可能会产生问题。

T-SQL Tuesday #001 (Date/Time Tricks): The Roundup

上有很多关于日期时间主题的博客文章

答案 3 :(得分:0)

试试这个: -

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

答案 4 :(得分:0)

这是datediff的用途:

delete from Table where datediff(day,'2009-12-09',date_filled) = 0