我需要通过将 sql server 中的列从 int 转换为 date 来更新我的表

1 sql-server

我想将 transe_date 列从 int 更新为 date ..

update fci
set fci.transe_date= convert(date,convert(varchar(8),transe_date));
Run Code Online (Sandbox Code Playgroud)

use*_*983 5

您可以使用 2 个语句,而不是创建新列、完成UPDATE语句、重命名旧列,然后重命名新列ALTER。您不能将 an 隐式转换int为 to date,但可以将 an 隐式转换为intto varchar,然后从 a 隐式转换为varchara date

USE Sandbox;
GO

CREATE TABLE dbo.SomeTable (DateColumn int);

INSERT INTO dbo.SomeTable (DateColumn)
VALUES (20160101),
       (20160307),
       (20180920);
GO
SELECT *
FROM dbo.SomeTable
GO
ALTER TABLE dbo.SomeTable ALTER COLUMN DateColumn varchar(8);
ALTER TABLE dbo.SomeTable ALTER COLUMN DateColumn date;
GO

SELECT *
FROM dbo.SomeTable
GO

DROP TABLE dbo.SomeTable
Run Code Online (Sandbox Code Playgroud)

当然,这假设您的所有整数都是有效的日期值。

编辑:如果您确实有无效日期值的值,则需要首先识别并更正这些值。您可以使用以下方法识别这些TRY_CONVERT

SELECT YourIntColumn
FROM dbo.YourTable
WHERE TRY_CONVERT(date,CONVERT(varchar(11),YourIntColumn)) IS NULL;
Run Code Online (Sandbox Code Playgroud)

无需TRY_CONVERT在 上添加 a varchar(11),因为 anint始终可以转换为 a varchar。我varchar(11)也使用了 ( 而不是varchar(8)( 因为最大的字符长度值,你可能会是-2147483648( 11 个字符长)。