微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。