update A set G= convert(varchar(10),dateadd(dd, 2+abs(checksum(newid()))%6 ,DATEADD("m",1,convert(varchar(6),c,112) +'01')),102)
从字符串向 datetime 转换时失败。
C字段是 char 10 2012.04.01 都是这种类型的
update A set G= cast(convert(varchar(10),dateadd(dd, 2+abs(checksum(newid()))%6 ,DATEADD("m",1,convert(varchar(6),cast(c as datetime),112) +'01')),102) as datetime)
--或者update A set G= cast(convert(varchar(10),dateadd(dd, 2+abs(checksum(newid()))%6 ,DATEADD("m",1,cast(c as char(7)) +'.01')),102) as datetime)
update A set G= convert(varchar(10),dateadd(dd, 2+abs(checksum(newid()))%6 ,DATEADD("m",1,cast(c as char(7)) +'.01')),102)
convert(varchar(10),dateadd(dd, 2+abs(checksum(newid()))%6
,DATEADD("m",1,convert(varchar(6),c,112) +'01')),102)
update A set G=
cast(convert(varchar(10),dateadd(dd, 2+abs(checksum(newid()))%6
,DATEADD("m",1,convert(varchar(6),cast(c as datetime),112) +'01')),102)
as datetime)
cast(convert(varchar(10),dateadd(dd, 2+abs(checksum(newid()))%6
,DATEADD("m",1,cast(c as char(7)) +'.01')),102)
as datetime)
update A set G=
convert(varchar(10),dateadd(dd, 2+abs(checksum(newid()))%6
,DATEADD("m",1,cast(c as char(7)) +'.01')),102)
--以今天为例
select convert(varchar(10),dateadd(dd, 2+abs(checksum(newid()))%6
,DATEADD("m",1,cast('2012.09.23' as char(7)) +'.01')),102)
/*
----------
2012.10.05(1 行受影响)
*/
--最外层
convert(varchar(10),时间类型数据或可隐式转换为时间的字符串,102)--将时间数据转换成 yyyy.mm.dd格式的字符串类型
--内层一,就是上面的时间类型数据
dateadd(dd, 整数,时间类型数据或可隐式转换为时间的字符串)--时间加N天,dd代表天,
--同理
dateadd("m", 整数,时间类型数据或可隐式转换为时间的字符串)--表示时间加N个月
--
2+abs(checksum(newid()))%6 --该语句获取2-7的随机数
--
cast('2012.09.23' as char(7)) +'.01'--取前面的7位并+ '.01'即变成'2012.09.01',目的是取本月1号
再讲时间类型数据转换成 yyyy.mm.dd的字符串类型输出