0

between 句を使用して範囲を照会できるように、varchar mm/dd/yyyy データを datetime mm/dd/yyyy 形式に変換/キャストしようとしています。

以前に同様の質問があったのを見たことがありますが、日付にスラッシュがなく、その回避方法がわかりません。

4

1 に答える 1

8

適切な範囲クエリを実行するには、不適切な地域形式から予測可能な方法で変換してから、制限のない範囲を使用できます。これは、誰かが 6 月 8 日ではなく 8 月 6 日に入力して意味することからあなたを保護するものではありません06/08/2013が、自由なテキスト入力をサポートしている場合、それはあなたが取らなければならないリスクです.

DECLARE @s DATETIME, @e DATETIME;

SELECT @s = CONVERT(DATETIME, '03/13/2013', 101),
       @e = CONVERT(DATETIME, '03/26/2013', 101);

SELECT <cols>
FROM dbo.table_name
  WHERE datetime_column >= @s
  AND datetime_column < DATEADD(DAY, 1, @e);

理想的には、ユーザーが のような地域のナンセンスを入力できないようにする必要がありますm/d/y。ストアド プロシージャへの入力形式を制御する場合は、 のような明確な日付リテラルを送信できますYYYYMMDD。または、さらに良いのは、厳密に型指定されたパラメーターを使用することです。ユーザーがその場しのぎのナンセンスに入るのを防ぐことができればできるほど、頭の痛い問題は軽減されます。これらの記事を読んでください:

于 2013-03-22T19:38:33.270 に答える