#sql #tsql #jdbc
#sql #tsql #jdbc
Вопрос:
Я пытаюсь выполнить этот простой запрос, чтобы получить сумму всех сумм за прошлый год и получить ошибку. Может кто-нибудь пролить свет на это, пожалуйста. Я не выполняю никакого приведения, а столбец TX_DATE имеет тип 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
Комментарии:
1. Может ли TX_DATE быть типом поля, отличным от DATE или DATETIME?
2. ДА. Действительно. Его nvarchar в UAT env и Date в моем собственном evn 😉
3. Кажется, он содержит мусорные даты, тогда … 🙂
4. Поскольку вы используете Datediff для datepart month, вероятность возврата значения, которое находится вне диапазона для int, сомнительна. Это единственный запрос, который запускается, или это часть какого-то большого запроса. Также узнайте максимальные и минимальные даты TX_DATE из таблицы ТРАНЗАКЦИЙ. Может быть, это помогает.
Ответ №1:
Проверьте тип TX_DATE
. Кажется, это не дата.
Комментарии:
1. Действительно, TX_DATE не имеет типа date (проверено после того, как я опубликовал вопрос). То, что мне до сих пор не ясно, заключается в том, почему запрос не завершается с ошибкой при запуске через Microsoft SQL Server Management Studio, но завершается с ошибкой при запуске через jdbc.
2. Это две разные системы, поэтому все зависит от того, как было интерпретировано значение TX_DATE .