使用案例语句更新数据类型



我正在尝试更新我使用的表中的数据类型。它目前存储为int但它确实是一个date列。

现在看起来20191012。出于某种原因,他们没有使用null,而是0没有日期的列。

当我查询我使用的表时

case 
when bthdat = 0 
then '9999-12-31' 
else convert(date, convert(varchar(10), bthdat)) as dob
end

是否可以使用相同的逻辑来更新实际表本身?如果是这样,如何?谢谢。

您将无法UPDATE现有列,因为intdate不兼容。

但是,您可以做的是更改数据类型几次,中间有一个UPDATE。但是,这假设所有值都是有效的(例如没有像20190229这样的值(,并且采用 ISO 格式yyyyMMdd

ALTER TABLE dbo.YourTable ALTER COLUMN bthdat varchar(10);
UPDATE dbo.YourTable
SET bthdat = NULL
WHERE bthdat = '0';
ALTER TABLE dbo.YourTable ALTER COLUMN bthdat date;

您可以按如下方式使用

update
a
set
bthdat = case
when bthdat = 0 then '9999-12-31'
else convert(date,convert(varchar(10),bthdat))
end
from
YourTable as a

不要忘记为未更新的记录设置 else 以保留现有值。

最新更新