关于SQLserver2008中批量数据更新表中的某一字段的值,字段类型为datetime,想要只修改年月日,不修改时分秒

时间:2022-04-26 07:06:12
由于前期数据混乱,现在要修改上万条的数据,悲剧啊,现在表tab中有3个字段分别为time1,time2,time3,这三个字段都是datetime格式的,其中time2的年月日错了(time2要在time1和time3之间),我要只改其中的年月日不改时分秒,将time2的年月日改成比time1的年月日大5~7天,这个可以用随机函数select 5+abs(checksum(newid()))%(7-5+1)来获取(最烦的是每条记录的时间都是不同的)请各位大神赐教!!!

4 个解决方案

#1


使用dateadd加天啊,参考
http://msdn.microsoft.com/zh-cn/library/ms186819.aspx

#2


update tab set time2=dateadd(day,5+abs(checksum(newid()))%(7-5+1),time2);

貌似用字符串的话有点复杂。。

#3


用字符串的话有点复杂?数据类型是字符串?convert加个参数转化。

#4


update tab set time2 =  time1+(select 5+abs(checksum(newid()))%(7-5+1))+(select convert(char(12),time2,114) value) 
   where time2<time1 or time2>time3
谢谢各位的帮忙了,我已经写出来了,虽然有点麻烦

#1


使用dateadd加天啊,参考
http://msdn.microsoft.com/zh-cn/library/ms186819.aspx

#2


update tab set time2=dateadd(day,5+abs(checksum(newid()))%(7-5+1),time2);

貌似用字符串的话有点复杂。。

#3


用字符串的话有点复杂?数据类型是字符串?convert加个参数转化。

#4


update tab set time2 =  time1+(select 5+abs(checksum(newid()))%(7-5+1))+(select convert(char(12),time2,114) value) 
   where time2<time1 or time2>time3
谢谢各位的帮忙了,我已经写出来了,虽然有点麻烦