【问题标题】:Msg 241, Level 16, State 1, Line 12 Conversion failed when converting date and/or time from character string消息 241,级别 16,状态 1,第 12 行从字符串转换日期和/或时间时转换失败
【发布时间】:2021-10-02 13:51:55
【问题描述】:

对 SQL Server 来说相当陌生,我很难理解为什么当我在临时表中使用这种日期转换时它不起作用。出于某种原因,当我在没有临时表的情况下使用它时它可以工作。

数据库包含YYYYMMDD格式的日期。

[DOB] = CAST(LEFT(DC.DATE_BIRTH,8) AS DATE),

我收到此错误:

从字符串转换日期和/或时间时转换失败。

谢谢!

【问题讨论】:

  • 请包含一个重现错误的实际示例。 date_birth 似乎是 string 而不是 date
  • 似乎您的列包含的字符串值大多只是格式如 YYYYMMDD。当它们偏离该确切格式时,您将收到该错误消息,例如:select cast('2021-12-' as date)DATE_BIRTH 列实际上没有使用 date 数据类型是否有原因?
  • 我强烈建议您将日期存储在 DATE 类型的列中,而不是 VARCHAR
  • 不幸的是,使用 varchar 存储日期允许存储无效值,您需要清理无效值表或以其他方式在查询中避免它们。这总是发生 - 一个教训。您可以使用 TRY_CAST() 来解决该错误。
  • 运行此 SQL 以查看哪些值无法转换为日期:SELECT DC.DATE_BIRTH FROM YourTableName WHERE TRY_CAST(LEFT(DC.DATE_BIRTH,8) AS DATE) IS NULL

标签: sql sql-server


【解决方案1】:

此错误是由于您在 DC.DATE_BIRTH 表中的数据造成的。检查你的日期。我想在这张表的某些行中存在当你用 8 个字符修剪它时,剩余部分不是正确的日期格式的行。

【讨论】:

    猜你喜欢
    • 2020-05-27
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 2012-04-17
    • 2017-12-07
    相关资源
    最近更新 更多