我正在尝试更新我使用的表中的数据类型。它目前存储为int
但它确实是一个date
列。
现在看起来20191012
。出于某种原因,他们没有使用null
,而是0
没有日期的列。
当我查询我使用的表时
case
when bthdat = 0
then '9999-12-31'
else convert(date, convert(varchar(10), bthdat)) as dob
end
是否可以使用相同的逻辑来更新实际表本身?如果是这样,如何?谢谢。
您将无法UPDATE
现有列,因为int
和date
不兼容。
但是,您可以做的是更改数据类型几次,中间有一个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 以保留现有值。