sql-server - 将日期从字符串转换为新的日期字段

标签 sql-server date type-conversion

我有一个从 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/

相关文章:

ruby-on-rails - Ruby on Rails - 仅显示当前日期

c# - 根据行类型将父子表映射到其他表

sql-server - 部署 Visual Studio 2010 数据库项目

php - 检查英国日期是否在 SQL 中的两个日期之间

c++ - std::vector<uchar> 到 char* 数据丢失

c - C 中的类型转换(降级)

c - 在 C99 标准中,将 unsigned int 转换为 unsigned char 的行为是什么?

sql-server - 表使用太多磁盘空间

c# - 在 SQL Server 2017 中部署 CLR UDF : procedure

javascript - 在 Javascript 中转换特定日期