4

日付に基づいてデータベースで一連の結果を見つけようとしています。日付は、dd / mm / yyyy hh:mm:ssの形式でvarcharとして保存されます。

私がやりたいのは、指定された日付の範囲内のすべての日付を検索することです。

たとえば、私は試しました:

SELECT * FROM table_name
WHERE fromDate BETWEEN LIKE '%12/06/2012%' AND LIKE '%16/06/2012%'

これまでのところほとんど成功していないので、このようなことは可能ですか、それともこのタイプのステートメントを実行するためのより良い方法がありますか?

Microsoft SQLServer2008を使用しています。

ピーター

4

5 に答える 5

7

日付の値には時刻も含まれているため、BETWEENを使用することはできません。これを行う唯一の安全な方法は次のとおりです。

SELECT <cols> FROM dbo.table_name
WHERE CONVERT(DATE, fromDate, 103) >= '20120612' 
AND CONVERT(DATE, fromDate, 103) < '20120617';

ただし、Martinが気付いたように、その列でインデックスを使用することはできないため、これにより常に全表スキャンが実行されます。

本当にBETWEENを使用したい場合は、DATEに変換することが唯一の安全な方法です(まあ、または他の効率の悪い方法で休暇を短縮する):

SELECT <cols> FROM dbo.table_name
WHERE CONVERT(DATE, fromDate, 103) BETWEEN '20120612' AND '20120616';

しかし、一貫性の理由から、その場合でも間を使用しないことをお勧めします。

于 2012-06-21T12:22:43.583 に答える
2

これを試して

SELECT * FROM table_name
WHERE Convert(Date,fromDate,103) 
BETWEEN '20120612' AND '20120616'
于 2012-06-21T11:39:22.513 に答える
1

最善の解決策は、varcharをDateTimeとしてデータベースに保存することです。

次善の策は、選択した日付に変換することです(他の回答が示しているように、例を示すつもりはありません)

于 2012-06-21T11:40:11.203 に答える
0

以下は私にとってはうまくいきます。これを試して:

 SELECT *
 FROM [MABH-Desi-Dera].[dbo].[Order] 
 WHERE (CONVERT(nvarchar,[Order_ID]) BETWEEN  '200622%' AND '200623%')

ここで、Order_IDsはいくつかの日付で始まります:

于 2020-06-25T12:46:21.693 に答える
0

こんにちは男これはロケット科学の仲間ではありませんただのような論理を作ります

ブロッククォート

SELECT * FROM table_name WHERE fromDate BETWEEN '2021-05-01 12:00:00' AND '2021-05-01 23:59:00'

ブロッククォート

それは私も立ち往生して動作しますが、それは役立ちます。私もあなたのようなロジックを作ろうとしていました

于 2021-06-01T15:07:54.860 に答える