SQL Server:将nvarchar年转换为datetime

时间:2017-07-20 13:49:52

标签: sql sql-server datetime nvarchar

我正在尝试将nvarchar(5)出生年份(例如1972年)转换为SQL Server表格中的datetime(例如1972-06-01)。

类似的东西:

UPDATE TableName
SET DateOfBirth = CONVERT(datetime, YearOfBirth + '/01/01', 103)

这会抛出错误

  

从字符串

转换日期和/或时间时转换失败

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

您正在做的事情需要两个步骤:将列中的值存储为日期,然后更改类型。

在您的情况下,需要第三步,因此该列足以存储日期值的值字符串表示形式。我认为这将在SQL Server中起作用:

ALTER TABLE TableName ALTER COLUMN DateOfBirth NVARCHAR(32);

UPDATE TableName
    SET DateOfBirth = YearOfBirth + '-01-01';

ALTER TABLE TableName ALTER COLUMN DateOfBirth Date;

第一个ALTER TABLE会将列更改为足够宽的新月和日。然后日期以标准格式构建(好吧,省略连字符将更加标准)。然后该列将转换为日期。

如果你只想要一个看起来像日期的东西 - 并且对Stack Overflow有很多批评;) - 你可以消除第三步。

答案 1 :(得分:0)

这就是你所需要的一切

UPDATE TableName
SET DateOfBirth = YearOfBirth + '-06-01'
Where YearOfBirth = '1972'