演员还是转换?

时间:2010-06-01 19:46:40

标签: sql casting

当我尝试更改日期列时,我收到错误:

Arithmetic overflow error for type varchar, value = 20100601.000000.

我希望它从float到20100601的日期时间格式。

由于Alter不起作用,如何使用强制转换或转换来更改表中每个条目的数据类型?

3 个答案:

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

这将更新新列