仅在SQL Server中更新日期

时间:2013-12-06 10:25:01

标签: sql sql-server sql-server-2005

我的数据库表中的这一行的值为1/5/2013 5:50:00 PM,我想只更新日期部分。时间应相同而不做任何更改,只需要更改此记录中的日期。

我已经尝试了更新语句,但它也改变了时间..但我可以做一个

UPDATE table1
SET date = '1/10/2013 5:50:00 PM'
WHERE id =1

这不是我想要的,不同的id有不同的时间,所以只需要更新日期,保持该记录中的时间相同。

请提供反馈。

谢谢

6 个答案:

答案 0 :(得分:2)

UPDATE table1
SET date = DATEADD(dd,5,date)-- 5 is the number of days
FROM table1
WHERE id =1

答案 1 :(得分:1)

如果您使用的是SQL Server 2008或更高版本,则可以这样做

UPDATE table1
SET [date] = cast('1/10/2013' as datetime) + cast(cast([date] as time) as datetime)
WHERE id =1

如果您使用的是SQL Server 2005或更低版本,那么您没有time数据类型,因此您必须这样做:

UPDATE table1
SET [date] = cast('1/10/2013' as datetime) + ([date] - DATEADD(dd, 0, DATEDIFF(dd, 0, [date])))
WHERE id =1

答案 2 :(得分:0)

不是最优雅的,但应该有效。想法是从目标行和硬编码其他部分中提取小时,分钟和秒。

update table1 set date = DATEADD(second, DATEPART(second, date), DATEADD(minute, DATEPART(minute, date), DATEADD(hour, DATEPART(hour,date), '2013-01-10')));

答案 3 :(得分:0)

虽然外表有些晦涩,但如果您只想更改具有仲裁值的日期部分,而不是触及时间部分,那么这将有所帮助:

update table1 set date= '06-dec-2013 ' + cast(datepart(HOUR,date) as varchar(2)) + ':' + 
cast(datepart(MINUTE,date) as varchar(2)) + ':' +
cast(DATEPART(SECOND, date) as varchar(2)) + ' ' +
CASE WHEN DATEPART(HOUR, date) < 12 THEN 'AM' ELSE 'PM' END as datetime
where id=1

将'06 -dec-2013'替换为您要替换的日期值。

答案 4 :(得分:0)

create table t
(
col1 datetime
)

Insert Into t 
values ('1/5/2013 5:50:00 PM')



declare @newDate datetime

set @newDate = '1/10/2013'

update t
Set col1 = convert(datetime,DateAdd(day, DateDiff(day, col1, @newDate), Col1),101)

sql-fiddle demo

答案 5 :(得分:0)

这是您想要的查询:

declare @TargetDate datetime
set @TargetDate = '20131001' --1st October 2013

update table1 set [date] = DATEADD(day,DATEDIFF(day,[date],@TargetDate),[date])
where id = 1

这是一个完整的脚本来演示它:

declare @t table (dt datetime not null)
insert into @t (dt) values
('2001-01-01T10:53:44.993'),('2012-06-18T15:33:33.333')

declare @TargetDate datetime
set @TargetDate = '20131001' --1st October 2013

update @t set dt = DATEADD(day,DATEDIFF(day,dt,@TargetDate),dt)

select * from @t

结果:

dt
-----------------------
2013-10-01 10:53:44.993
2013-10-01 15:33:33.333

这可以通过使用DATEDIFF来计算目标日期与表中存储的每个日期(具有适当的标牌)不同的天数,然后将该差异添加回日期 - 具有调整效果存储值的日期部分,但不影响时间。