【发布时间】:2017-01-01 06:27:57
【问题描述】:
yyyymmdd 约会让我感到非常痛苦。在此数据库中,null 日期存储为空字符串。
这执行得很好,我可以手动检查日期是否有错误
SELECT
effective, expiration
FROM
(SELECT
CONVERT(date, date_effective, 112) as effective,
CONVERT(date, date_expiration, 112) as expiration
FROM ... ) AS X
但是当我想像这样比较它们时:
...
) AS X
WHERE
GETDATE() BETWEEN effective AND expiration
这会引发错误
从字符串转换日期和/或时间时转换失败。
我快要淹死了,我花了好几个小时试图让这个日期转换起作用。我担心我唯一的选择是将我想要的东西放入临时表中。日期转换不应该这么难。请帮我转换这些日期并进行比较。
编辑:这个非常大的数据库中有 DIRTY 行,0.003% 的行是坏的
【问题讨论】:
-
您能否确认您没有任何“脏”行,即不适合 yyyymmdd 或空字符串模式的行?
-
我不能,我怀疑是这种情况。我会稍微努力一下
-
@SqlOnly BINGO 有脏数据,如何处理?
-
@SqlOnly 我很乐意接受您的评论作为答案,我能够围绕字符串的长度做出 CASE 语句
-
日期转换应该这么难……很难。尤其是输入数据不好的时候。
标签: sql-server date casting