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个数字来表示出生年份(