将 char 数据类型转换为 datetime 数据类型导致日期时间值超出范围。
当我在台式机上运行 SQL 查询时,一切正常。没有错误或任何东西。但是,当我在运行它的服务器上执行相同的代码时,它会失败。
我已确定这是导致问题的 SQL 部分。 DateOfRun 是一个日期时间字段。
,(SELECT intField
FROM tableA
WHERE RowIdentifier= ParentTable.RowIdentifier
AND DateOfRun = Convert(Varchar(10),ParentTable.OfferOutcomeDateTime,120)) AS Days
为什么这可以在一台机器上运行,但在另一台机器上不行?
最佳答案
这绝对是奇怪的,可能与区域设置有关,但它就像一个老笑话
A man goes to a doctor's office. He says, "Doctor, it hurts when I raise my arm over my head." The doctor replies, "Then don't raise your arm over your head."
所以不要这样做。改为执行此操作
WHERE RowIdentifier= ParentTable.RowIdentifier
AND DateOfRun =
DATEADD(DAY, DATEDIFF(DAY, 0, ParentTable.OfferOutcomeDateTime), 0)
这是查看 Thomas 对 Most efficient way in SQL Server to get date from date+time? 的回答的最佳方式
然后,无论区域设置如何,它都会起作用,因为它永远不会表示为字符串
关于sql - 相同的 SQL 在一台机器上运行,但在另一台机器上给出超出范围的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6463115/