当我尝试更改日期列时,我收到错误:
Arithmetic overflow error for type varchar, value = 20100601.000000.
我希望它从float到20100601的日期时间格式。
由于Alter不起作用,如何使用强制转换或转换来更改表中每个条目的数据类型?
答案 0 :(得分:3)
“20100601.000000”从浮动投射到日期时间是指1900年1月1日之后的2000万,10万,601天。
“20100601”字符串是2010年6月1日。
我会用它来100%确定转化次数
SELECT CAST(CAST(CAST(20100601.000000 AS int) AS char(8)) AS datetime)
答案 1 :(得分:2)
我相信一定有更好的方法......
ALTER TABLE dbo.YourTable ADD
NewColumn datetime NULL
UPDATE [YourTable]
SET [NewColumn] =
CAST(CAST(CAST(ROUND(YourOriginalColumn,0) as INT) AS char(8)) AS DATETIME)
然后,如果想要在完整性检查后更换旧列,请进行备份等。
ALTER TABLE dbo.Cars
DROP COLUMN YourOriginalColumn
EXECUTE sp_rename N'dbo.YourTable.NewColumn', N'YourOriginalColumn', 'COLUMN'
答案 2 :(得分:2)
UPDATE table_name
SET new_date_column=CAST(CAST(CAST( old_date_column AS INT) AS VARCHAR) AS DATETIME)
这将更新新列