Sql server 如何在SQL Server 2012中将数据类型从date更改为int?

Sql server 如何在SQL Server 2012中将数据类型从date更改为int?,sql-server,database,Sql Server,Database,我有一张像这样的桌子 CREATE TABLE Student ( s_id int NOT NULL IDENTITY(1,1), sname nvarchar(30) NOT NULL, address nvarchar(30) NOT NULL, gender varchar(10) NOT NULL, birthyear date NOT NULL, CONSTRAINT PK_Student PRIMARY KEY (s_id) );

我有一张像这样的桌子

CREATE TABLE Student 
(
    s_id int NOT NULL IDENTITY(1,1),
    sname nvarchar(30) NOT NULL,
    address nvarchar(30) NOT NULL,
    gender varchar(10) NOT NULL,
    birthyear date NOT NULL,
    CONSTRAINT PK_Student PRIMARY KEY (s_id)
);
现在,我想将
生日
列的数据类型从
日期
更改为
整数

我学习了w3school.com的教程:

ALTER TABLE table_name
ALTER COLUMN column_name datatype
这是我的密码:

ALTER TABLE Student 
ALTER COLUMN birthyear int
但它抛出了一个错误

操作数类型冲突:日期与int不兼容

你们能帮我吗?求你了


谢谢大家!

您不能直接执行此操作,
DATE
不是
INT
-SQL Server应该如何将
2015-05-07
这样的日期转换为
INT

您基本上有两种选择:

选项#1:将当前列
生日
重命名为
生日
,并添加一个计算列
生日
,该列仅给出该日期的年份:

-- rename "birthyear" to "birthdate"
EXEC sp_RENAME 'Student.Birthyear' , 'BirthDate', 'COLUMN'

-- add new computed column "birthyear"
ALTER TABLE dbo.Student 
   ADD BirthYear AS YEAR(birthdate) PERSISTED
选项2:创建新列,将日期年份放入该列,删除旧列,将新列重命名为旧名称

-- add new  column "newbirthyear"
ALTER TABLE dbo.Student 
   ADD NewBirthYear INT 

-- update table, extract YEAR(birthyear) into new column
UPDATE dbo.Student
SET NewBirthYear = YEAR(birthyear)

-- drop old column
ALTER TABLE dbo.Student
DROP COLUMN birthyear

-- rename new column back to old column name
EXEC sp_RENAME 'Student.NewBirthyear' , 'BirthYear', 'COLUMN'
当列为空(全部为空)时,可以使用varchar转换执行过渡步骤。 不可能直接转换,但这应该可以:
date->varchar->int

ALTER TABLE Student ALTER COLUMN birthyear varchar(200);
ALTER TABLE Student ALTER COLUMN birthyear int;

请参阅。

您是否从表中删除了所有旧数据?请告知您是否需要日期作为从公元1月1日起的天数,或者您是否希望将日期表示为整数,如ISO YYMMDD格式,如20150507。@corky_bantam:我使用日期类型,但无法在该列中插入值,如1978、1980、1985。我的意思是,我只是习惯用4个数字来表示出生年份(