31

テーブルに日付 (DateTime) の列があり、次のような WHERE 句を作成しようとしています。WHERE dates BETWEEN 12-11-2012 and 12-13-2012

日付列のサンプル値 = 2012-05-24 00:38:40.260

私が言いたいのは、MM-DD-YYYY と MM-DD-YYYY の間の WHERE 日付です。

やってみた

WHERE dates BETWEEN ((convert(nvarchar(10), dates,110) = '2012-12-12') AND (convert(nvarchar(10), dates,110) = '2012-12-12'))

しかし、うまくいかないようです。「=の近くの構文が正しくありません

助けてください

編集:

さまざまなオプションと説明をありがとう。@RichardTheKiwi のオプションで動作するようになりました。

4

3 に答える 3

45

列に時間情報が含まれていない場合datesは、次の方法で回避できます。

WHERE dates BETWEEN '20121211' and '20121213'

ただし、dates列が実際に日時であることを考えると、これが必要です

WHERE dates >= '20121211'
  AND dates < '20121214'  -- i.e. 00:00 of the next day

SARGability (良好なパフォーマンスのためにインデックスを使用する機能) を保持する SQL Server 2008 以降の別のオプションは次のとおりです。

WHERE CAST(dates as date) BETWEEN '20121211' and '20121213'

注:明確な日付リテラルのために、SQL Server では常にISO-8601 形式の YYYYMMDD を使用してください。

于 2012-12-13T22:31:54.027 に答える
6
WHERE dates BETWEEN (convert(datetime, '2012-12-12',110) AND (convert(datetime, '2012-12-12',110))
于 2012-12-13T22:36:07.373 に答える
1

Date と Nvarchar を比較しようとしていますが、これは間違っています。する必要があります

Where dates between date1 And date2
-- both date1 & date2 should be date/datetime

date1、date2 文字列の場合。サーバーは、フィルタリングする前にそれらを日付タイプに変換します。

于 2012-12-13T22:36:12.963 に答える