我有一个带有DateTime
列Move_Date
的表。日期是正确的,但是时间部分被清零了,所以我尝试用正确的时间替换清零的列。我的查询如下:
update TableA
set Move_Date = replace(Move_Date, '00:00:00.000', '18:00:00.000')
当我运行此查询时,它成功成功,影响了1,632,380行,但表中没有任何更改。我的查询是否有问题或这是一个错误?
答案 0 :(得分:4)
对于datetime
列,请勿使用字符串函数!我认为最简单的是dateadd()
:
update TableA
set Move_Date = dateadd(hour, 18, move_date);
如果您只想在日期已经是午夜时执行此操作,则添加一个适当的过滤器:
update TableA
set Move_Date = dateadd(hour, 18, move_date)
where move_date = convert(date, move_date);
答案 1 :(得分:1)
假设您要设置时间部分:
UPDATE table1
SET Move_Date = CAST(CAST(Move_Date AS DATE) AS DATETIME) + CAST('18:00' AS DATETIME)
-- WHERE CAST(Move_Date AS TIME) = '00:00'
-- WHERE CAST(Move_Date AS TIME) <> '18:00'