我想要更新表格中所有值的日期以使其具有相同的天,但保持时间的情况每条记录。
So these three dates...
8/28/2012 14:00:00
8/28/2010 12:00:00
8/28/2008 10:00:00
Should be turned into...
8/28/2012 14:00:00
8/28/2012 12:00:00
8/28/2012 10:00:00
UPDATE MySpecialTable
SET DateField = {...?};
编辑:无论日期是什么日期(即2012年8月28日,2012年1月1日,2012年4月1日等),我都希望保持时间和批量更新所有日/月/年到特定值。
答案 0 :(得分:6)
DECLARE @Target DATETIME;
SET @Target = '20120828';
-- if the date is supposed to be today rather than hard-coded or parameterized:
-- SET @Target = DATEADD(DAY, DATEDIFF(DAY, '19000101', CURRENT_TIMESTAMP), '19000101');
UPDATE dbo.MySpecialTable
SET DateField = DATEADD(DAY, DATEDIFF(DAY, DateField, @Target), DateField);
如果目标日期在列中的值之前或之后,这将起作用。
另外,如果您只关心时间,则应考虑使用TIME data type(SQL 2008+)。这样可以在查询时轻松地将您想要的任何日期应用于数据,而无需实际执行任何更新。
答案 1 :(得分:0)
这是一种方法,假设您使用的是SQL Server 2008或更高版本:
update MySpecialTable
set DateField = cast(CURRENT_TIMESTAMP as date) + (DateField - cast(DateField as date))
答案 2 :(得分:0)
尝试此操作(已更新为具有相同日期):
DECLARE @myDate DATETIME
SET @myDate = '2012-08-28T00:00:00.000'
UPDATE [MySpecialTable]
SET [DateField] = DATEADD(Day, 0-DATEDIFF(Day, 0, [DateField]), [DateField]) + @myDate
DATEADD(Day, 0-DATEDIFF(Day, 0, [DateField]), [DateField])
得到了
时间戳并将日期设为最小值(1/1/1900)