【发布时间】: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 的最大和最小日期。可能会有帮助。