0

次のクエリでは:

SELECT 
  DU.MESSAGEINSERTDATE 
from [MYSMSREPORT].[DBO].[SIXDAYSHISTORY] 
where
  (CONVERT(NVARCHAR, CONVERT(DATETIME, MESSAGEINSERTDATE, 104), 112) 
  BETWEEN 
     CONVERT(NVARCHAR, CONVERT(DATETIME, 01/08/2008, 104), 112) 
  AND CONVERT(NVARCHAR,CONVERT(DATETIME,31/09/2012,104),112))

このエラーがあります:

式をデータ型 datetime に変換する算術オーバーフロー エラー

何が問題ですか?

4

1 に答える 1

2

9 月 31 日は日付ではないため、SQL は日付に変換できません。

余談ですが、文化に固有の形式 (yyyyMMdd) で日付をハードコーディングする必要があります。01/08/2012あなたのサーバーでは 8 月 1 日に変換されるかもしれませんが、別のサーバーでは 1 月 8 日に実行される可能性があります。20120801 は、すべてのマシンで 8 月 1 日に変換されます。

さらに、なぜ日付をに変換するのNVARCHARですか? あなたが持っているインデックスの利点を取り除き、不必要な暗黙的および明示的な変換も実行しています。MESSAGEINSERTDATE使用できるDATETIME列であると仮定します

WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'

MESSAGEINSERTDATE使用時間を削除する必要がある場合

CAST(MESSAGEINSERTDATE AS DATE)
于 2012-09-26T10:16:54.173 に答える