我的表格中有一个日期时间字段。我想根据日期删除记录,但我对时间元素不感兴趣。我该如何为此编写SQL?我正在使用MS SQL 2008。
答案 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
,这有时可能会产生问题。
答案 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