【发布时间】: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