2016-08-12 2 views
0

нужна помощь. я просто хочу получить последние 3 месяца транзакции.Я просто хочу получить последние 3 месяца транзакции

SELECT * 
FROM transaction 
WHERE TransactionDate >= GETDATE()-90 

transactionDate является типом INT с этим форматом ГГГГММДД (напр. 20160812)

я получил эту ошибку

Арифметическое переполнение при преобразовании выражения для данных типа DateTime.

любая помощь будет делать

+0

Редактировать свой вопрос и показать образцы данных. Проблема явно «TransactionDate», но на ваш вопрос недостаточно информации для предоставления ответа. –

+0

вопрос изменен –

ответ

4

Вы не можете преобразовать Int непосредственно к дате. Однако вы можете преобразовать строку в формате YYYYMMDD. Итак, попробуйте следующее:

WHERE cast(cast(TransactionDate as varchar(255)) as date) >= GETDATE() - 90 

В качестве альтернативы, вы можете сделать все преобразования на текущей стороне дата:

WHERE TransactionDate >= CONVERT(INT, CONVERT(VARCHAR(255), GETDATE() - 90, 112)) 

Преимущество этого метода состоит в том, что двигатель может использовать индекс на TransactionDate.

Таким образом, правильный способ хранения столбца - DATE. SQL Server имеет встроенные типы данных даты и времени по какой-либо причине; есть много непосредственной поддержки для них. Используйте возможности базы данных.

+0

Это то, о чем я говорю. спасибо gordon –

+1

@SquallLionheart, Если этот ответ вам полезен, отметьте его как ответ. – RGS

Смежные вопросы