如何将字符串列转换为日期列

How to convert a string column into a date column

从 CSV 文件导入日期列,其中字符串值显示为

date
44705
44704
44703

我想将整个列转换为日期格式

date
"2022-05-22"
"2022-05-21"
"2022-05-20"

我使用了这个脚本来生成结果。

SELECT dateadd(d,44703,'1899-12-30') as date

问题是,我如何将此脚本应用于一系列值(table 中有 700 行)。例如 44000 到 44705。我希望所有字符串值都转换为日期格式。

要将字符串转换为日期,我们可以添加临时日期列并填充它并删除旧列并将新列重命名为旧列

alter table TableName add NewColumnName date null; --create temporary column
update TableName set NewColumnName =dateadd(d,cast(cast([date] as float) as int)-2,'1899-12-30') --fill it
alter table TableName drop column [date]--delete old column
EXEC sp_RENAME 'TableName.NewColumnName' , 'date', 'COLUMN'--rename new one to old one
select cast (44705-1 as smalldatetime) gives 2022-05-25 00:00

所以您可以使用上面的方法更新列。

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=dc24abb3025e0f3796e7d978ba406be3

fiddle 更新语句,根据测试,此行将更新所有行。

update #test
set pdate = cast(dateadd(d,tdate-2,'1899-12-30') as smalldatetime)