0

こんにちは、次のような SQL テーブルがあります。

RESERVATIONROOM:

ID          NAME            FROMDATE                       TODATE      

5           Room1        2012-11-29 11:46:00.000           2012-11-29 12:45:00.000
6           Room1        2012-11-29 12:55:00.000           2012-11-29 14:20:00.000
7           Room1        2012-11-29 15:00:00.000           2012-11-29 16:42:00.000

開始日と終了日があり、これら 2 つの日付の間にあるすべての部屋を選択したいと考えています。

例:

フォーム日付: 2012-11-29 11:50:00.000
から日付: 2012-11-29 13:46:00.000

出力は次のようになります。

予約室:

ID          NAME            FROMDATE                       TODATE      

5           Room1        2012-11-29 11:46:00.000           2012-11-29 12:45:00.000
6           Room1        2012-11-29 12:55:00.000           2012-11-29 14:20:00.000

これは私がこれまでに持っているものです:

SELECT* 
FROM RESERVATIONROOM
WHERE FROMDATE BETWEEN CONVERT(DATETIME,'2012-11-29 11:50:00.000',101) AND CONVERT(DATETIME,'2012-11-29 13:46:00.000',101)
AND TODATE < CONVERT(DATETIME,'2012-11-29 13:46:00.000',101)
ORDER BY FROMDATE ASC

Select ステートメントのフィルター処理が多く、これら 2 つの日付の間にあるすべての日付を表示できません。

何か不足していますか?

よろしくお願いいたします。

4

3 に答える 3

1

日時にvarcharを使用しているのはなぜですか? sql-parameters を使用して、sql-injection と変換の問題を回避します。

パラメータがすでにdatetimes.

BETWEEN両方のパラメーターに対して両方の列で使用できます。

SELECT *
FROM RESERVATIONROOM
WHERE @dateFrom BETWEEN FROMDATE AND TODATE
 OR   @dateTO   BETWEEN FROMDATE AND TODATE

(必要かどうか、ANDまたは-節に交差点を含めるかどうかわかりませんか?)ORWhere

于 2013-02-11T09:06:24.333 に答える
1

convert コメントで申し訳ありません。varchar 変換への datetime だと思いました。しかし、入力した日付から、2 つの日付を指定し、テーブルには各部屋に 2 つの日付があります。これらの from 日付と to 日付が何であるかは、実際には混乱しています。or出力例から、 2 つのフィルターの間で使用する必要があります。ここを見てください。幸運を。

select * from table1
where (convert(datetime, @from, 101) between fromdate and todate)
or (convert(datetime, @to, 101) between fromdate and todate)
于 2013-02-11T09:07:10.370 に答える
0

それ以外の

WHERE FROMDATE BETWEEN CONVERT(DATETIME,'2012-11-29 11:50:00.000',101) AND CONVERT(DATETIME,'2012-11-29 13:46:00.000',101)

使用する

WHERE FROMDATE > CONVERT(DATETIME,'2012-11-29 11:50:00.000',101)

于 2013-02-11T09:06:26.877 に答える