我有一个从 Excel 导入到 SQL Server 2012 的表,该表拒绝作为日期字段导入。它以 VarChar 形式出现,看起来像“03/15/2017”。所以我所做的就是在表中创建一个新的日期字段,现在我只想用文本的日期版本填充该字段。
我编写了这个小更新代码来执行此操作:
update [dbo].[Sheet5$]
set TDate = CAST(SUBSTRING([Date], 7, 4) + '/' + SUBSTRING([Date], 1, 2) + '/'
+ SUBSTRING([Date], 4, 2) AS DATETIME)
它给了我一个错误:
The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
谁能告诉我我做错了什么,以及如何修复它,以便我可以将这些日期放入日期字段?
最佳答案
表中某处有一些无效数据。如果您使用的是 2012 年或更高版本,则可以使用 TRY_CONVERT 或 TRY_PARSE 而不是 CAST。您也不需要其中的/字符。 ANSI 支持的格式为 YYYYMMDD。
update [dbo].[Sheet5$]
set TDate = TRY_CONVERT(SUBSTRING([Date], 7, 4) + SUBSTRING([Date], 1, 2) + SUBSTRING([Date], 4, 2) AS DATETIME)
然后您可以查看 TDate IS NULL 的行并找出这些行无效的原因并修复数据。
关于sql-server - 将日期从字符串转换为新的日期字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48503999/