2016-08-12 10 views
0

ヘルプが必要です。私はちょうど過去3ヶ月のトランザクションを取得したい。私はちょうど過去3ヶ月のトランザクション

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

transactionDate iは、データ型のdatetimeに式を変換し、このエラー

算術オーバーフローエラーを持って、この形式YYYYMMDDとINTタイプ(例:20160812)

あります。

すべてのヘルプは、あなたがこれまでに直接int型に変換することはできません

+0

編集あなたの質問やショーのサンプルデータ。問題は明らかに 'TransactionDate'ですが、あなたの質問には答えを提供するのに十分な情報を持っていません。 –

+0

質問改訂 –

答えて

4

を行います。ただし、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

これは私が話していることです。ありがとうございましたゴードン –

+1

@スカルリオハートこの答えがあなたに役立つ場合は、答えとしてマークしてください。 – RGS

関連する問題