SQL Server 中的日期 CAST 抛出转换失败的日期

问题描述

我遇到了一个非常独特的转换错误,我不明白为什么它会在某些日期发生并且仅在一种特殊情况下发生。 首先,我无法更改当前代码,它是来自遗留应用程序的动态查询,它是对不同表的查询的结果,以组合我遇到的问题。

错误是经典的“从字符串转换日期和/或时间时转换失败”。

一开始我以为是经典的文件命名错误,我们从文件名中获取日期,格式为YYYYMMDD,文件有前缀和后缀,并且总是这样格式化。得到格式错误的日期是很常见的,但它不再发生了。这个问题很有趣,因为它只发生在 1 种情况下,对于一些看起来不像错误的日期,例如,20201105 基本上被转换为 11/05/2020(美国格式,月份在前)。

这是查询

SELECT TOP 1 CAST(LEFT(REPLACE(FileName,'XXYYY_,''),8) AS DATE) AS MyDate FROM Mytable

本例中的文件名是 XXYYY_20201105.txt 为什么是前1?嗯,这是一个非常糟糕的设计,有很多行具有相同的值,而且只需要一个来确定日期。

最有趣的部分,当它失败时,我可以“修复”错误,只需添加一列:

SELECT TOP 1 CAST(LEFT(REPLACE(FileName,8) AS DATE) AS MyDate,AnotherColumn
FROM Mytable

这个查询,只是添加一列,不会失败。这是最奇怪的部分。我试图围绕获得一列和两列之间的区别进行思考。当我添加任何其他列时,问题似乎消失了。

非常感谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)