sql - 相同的 SQL 在一台机器上运行,但在另一台机器上给出超出范围的错误

标签 sql

将 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/

相关文章:

sql - 最佳实践 : Oracle SQL Joins

sql - 使用GORM的动态FindAllBy方法时出现SQL错误-未设置#2

MySQL选择行并加入多条记录

sql - 将数组传递给 PostgreSQL PL/pgSQL 函数

mysql - 获取具有限制的表列中特定行值之后的记录

.net - 在 where 子句中使用 Array 进行 Linq 查询?

sql - 如何在SQL中仅在一个字段上选择不重复的记录?

mysql - 在 SQL 中,如何显示一个学生选修了多个科目?

java - getString ("daterow") 返回从 10g 到 11g 的不同格式

mysql - 从 2 个表中选择条件