将datetime列转换为smallint

时间:2015-12-16 14:39:42

标签: sql sql-server

我有一个名为MyYear的列,其类型为datetime。它只存储了年份,因此我想将其更改为smallint。

当我尝试运行时:

ALTER TABLE MyTable
ALTER COLUMN MyYear smallint

我收到此错误:

  

从数据类型datetime到smallint的隐式转换不是   允许。使用CONVERT函数运行此查询。

当我运行时:

UPDATE MyTable
set MyYear=YEAR(MyYear)

它做了一些时髦的事情,并将所有年份设定为1905年。

我正在使用SQL Server。

1 个答案:

答案 0 :(得分:4)

您无法将DATETIME转换为SMALLINT,您需要:

ALTER TABLE MyTable 
ADD MyActualYear SMALLINT
GO

UPDATE MyTable SET MyActualYear = CAST(YEAR(MyYear) AS SMALLINT)
GO

ALTER TABLE MyTable
DROP COLUMN MyYear
GO

EXEC sp_RENAME 'MyTable.[MyActualYear]' , 'MyYear', 'COLUMN'
GO

即。添加一个新的临时列,使用您需要的值更新它,删除旧列,然后使用原始名称重命名临时列。

如果您在此列上有索引,您可能需要记住这可能产生的任何影响。