如何编写SQL Server查询,将数据库中datetime列中的所有字段更改为同一当前年份的随机日期?
答案 0 :(得分:2)
此方法会将日期时间范围转换为FLOAT。然后我们简单地计算这两个值之间的随机数,并将该随机值转换回日期时间
示例强>
Declare @D1 float = cast(cast('2017-01-01 00:00:00' as datetime) as float) -- 42734
Declare @D2 float = cast(cast('2017-12-31 23:59:59' as datetime) as float) -- 43098.9999884259
Select Top 10
RandomDate = cast(rand(cast( NewID() as varbinary ))*(@D2-@D1)+@D1 as datetime)
From master..spt_values A
<强>返回强>
RandomDate
2017-06-03 02:01:28.650
2017-06-12 01:05:54.107
2017-04-29 14:23:00.160
2017-10-13 14:37:51.290
2017-10-29 16:35:20.723
2017-06-30 20:54:03.197
2017-08-31 22:46:20.440
2017-02-11 23:42:24.323
2017-04-22 06:31:48.477
2017-12-01 18:05:49.177
编辑 - 动态
Declare @SQL varchar(max) = '
Declare @D1 float = cast(cast(''2017-01-01 00:00:00'' as datetime) as float);
Declare @D2 float = cast(cast(''2017-12-31 23:59:59'' as datetime) as float);
'
Select @SQL=@SQL+';Update '+quotename(Table_Schema)+'.'+quotename(Table_Name)+' Set '+quotename(Column_Name)+'=cast(rand(cast( NewID() as varbinary ))*(@D2-@D1)+@D1 as datetime)'+char(13)
From INFORMATION_SCHEMA.COLUMNS
Where Data_Type='datetime'
and Table_Catalog = 'OnlineStore'
Print @SQL
--Exec(@SQL)
答案 1 :(得分:2)
UPDATE t
SET datetime_column = DATEADD(DAY, abs(checksum(newid())) % 364, DATEADD(YEAR, DATEDIFF(YEAR, 0, datetime_column), 0))
FROM yourtable t
DATEADD()+ DATEDIFF()对将为您提供一年中的第一天
abs(checksum(newid()))%365将返回0到364之间的随机数