SQL查询成功执行但未进行任何更改

时间:2019-11-19 20:08:33

标签: sql sql-server datetime sql-update

我有一个带有DateTimeMove_Date的表。日期是正确的,但是时间部分被清零了,所以我尝试用正确的时间替换清零的列。我的查询如下:

update TableA 
set Move_Date = replace(Move_Date, '00:00:00.000', '18:00:00.000')

当我运行此查询时,它成功成功,影响了1,632,380行,但表中没有任何更改。我的查询是否有问题或这是一个错误?

2 个答案:

答案 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'