【发布时间】:2019-03-15 15:03:56
【问题描述】:
我正在从键/值表中读取一个值,该值应包含一个 NULLABLE 日期,格式为 yyyy-MM-dd。
查询的简化版本是。
SELECT CAST(ClaimDate AS DATE) AS ClaimDate
FROM MyTable
这会导致错误信息:
从字符转换日期和/或时间时转换失败 字符串。
我也试过CONVERT(DATE, ClaimDate),但无济于事。
现在,除了知道为什么会出现此错误之外,我还想知道是哪些值导致了此错误。
我已经看到关于上述错误消息的几个问题。但我还没有找到能回答我的问题的人。
当然,我们非常感谢您提出解决方案以及获取错误值的建议。
【问题讨论】:
-
按 Claimdate 排序并确保所有值都大于公元 1754 年,在此之前的日期不会转换为日期时间。
-
“应该”并不意味着“可以”。使用
TRY_CAST查找哪些行包含无效条目 -
@RobertSievers 他们可以。
select cast('1400-01-01' as date)工作 -
您正在执行
CAST(ClaimDate AS DATE)的事实意味着您有一个“日期”列未将数据存储为date(time)。这是你的真正的问题。varchar不是一种适合所有数据类型的尺寸。您需要修复数据类型定义。 -
尝试转换不合理的日期(例如 2 月 30 日)和其他原因时可能会发生这种情况。
标签: sql-server tsql date