我有一个表,其中一列是DOB
,目前属于Numeric(7,0)
类型。
该列的样本值如下
DOB
0
1050418
1050412
1060303
我正在转换SQL中的列,如下所示
SELECT Convert(Date,Convert(varchar,19000000+DOB),101) as DOB_Date From Test where DOB<>0
我的目标是将此列转换为日期日期类型。
执行SQL时
ALTER TABLE TEST ALTER COLUMN DOB DATE NULL;
给出错误
操作数类型冲突:数字与日期不兼容。
答案 0 :(得分:5)
两种选择,总体上差别不大。
1)将列数据类型更改为文本形式(例如varchar(10)
)。然后将文本值就地转换为可以明确转换为日期的表单(例如YYYYMMDD
没有分隔符),然后执行第二次数据类型转换。
2)创建一个新的日期类型列。使用现有表达式执行更新以设置新值。删除旧列并(如有必要)重命名新列以匹配旧列名。
答案 1 :(得分:0)
您可以向表中添加计算列以进行转换:
alter table t
add dob_date as (case when dob > 0 then cast(cast(dob + 19000000 as varchar(10)) as date) end);
如果您想这样做,那么您可以分多步完成:
alter table t alter dob varchar(8);
update t
set dob = (case when dob <> '0' then 19000000 + dob end);
alter table t alter dob date;
这是一个类型转换的日志,但它应该有效。