【问题标题】:TSQL: Arithmetic overflow error converting expression to data type datetimeTSQL:将表达式转换为数据类型日期时间的算术溢出错误
【发布时间】:2014-06-26 11:57:33
【问题描述】:

我正在尝试运行这个简单的查询来获取去年所有金额的总和并出现错误。有人可以对此有所了解。我没有进行任何强制转换,并且 TX_DATE 列的类型为日期。

SELECT SUM(AMOUNT) as TOTAL
FROM
    TRANSACTIONS
WHERE
    ID = '12345'
    AND TYPE = 'Amount'
    AND DATEDIFF(MONTH,TX_DATE,GETDATE()) <= 12

错误:

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Arithmetic overflow error converting expression to data type datetime.
    at   com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet$FetchBuffer.nextRow(SQLServerResultSet.java:4853)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.fetchBufferNext(SQLServerResultSet.java:1781)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.next(SQLServerResultSet.java:1034)
    at org.apache.commons.dbcp.DelegatingResultSet.next(DelegatingResultSet.java:207)
    at org.apache.commons.dbcp.DelegatingResultSet.next(DelegatingResultSet.java:207)
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:91)
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:1)
    at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:446)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:396)
    ... 50 more

【问题讨论】:

  • TX_DATE 可能是非 DATE 或 DATETIME 字段类型吗?
  • 是的。确实。它在 UAT env 中的 nvarchar 和在我自己的 evn 中的 Date ;)
  • 似乎它包含垃圾日期然后...... :)
  • 好吧,当您使用 Datediff 作为 datepart 月份时,返回值超出 int 范围的可能性值得怀疑。这是唯一被触发的查询还是某些大查询的一部分。还可以从 TRANSACTIONS 表中找出 TX_DATE 的最大和最小日期。可能会有帮助。

标签: sql tsql jdbc


【解决方案1】:

检查TX_DATE 的类型。好像不是约会。

【讨论】:

  • 确实,TX_DATE 不是日期类型(在我发布问题后检查)。仍然不清楚的是为什么查询在通过 Microsoft SQL Server Management Studio 运行时不会失败,但在通过 jdbc 运行时会失败。
  • 这是两个不同的系统,所以这完全取决于如何解释 TX_DATE 的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 2023-03-15
相关资源
最近更新 更多