2017-06-01 13 views
1

私はSQLクエリに問題があります。私の車が1.06から3.06まで3日間レンタルされ、利用可能な車を表示する場合は、datetimepicker1の日付を1.06から、datetimepicker2の日付を3.06から選択するなど、レンタル可能な車のリストを表示したい(占有していない)それは私にこの車を(OK)を借りることが表示されませんが、もし私がdatetimepickerから日付を4.06以上にシフトすれば、それは3.06に貸し出されていますが、自動車はすでにローンしています。利用可能な車を表示する方法

私のSQLクエリ:

string query = @"SELECT C.* FROM Auta C WHERE C.Auto_Id NOT IN (SELECT Auto_Id FROM Rezerwacje R WHERE ((@data1 >= R.DataFrom) AND (@data1 <= R.DataTo) AND (@data2 >= DataFrom) AND (@data2 <= DataTo)))"; 

enter image description here

enter image description here

答えて

0

[OK]を使用すると、開始日(@ DATE1)と終了日(@ DATA2)右の形式で日付範囲を取得するよう?

あなたはDateFromとDateToがこの範囲を「オーバーラップ」しない行を選択します。

だから、開始日がどこかの範囲内である場合である可能性があります。

@date1 BETWEEN R.DataFrom AND R.DataTo 

終了日がこれらの範囲

@date2 BETWEEN R.DataFrom AND R.DataTo 

又はその開始との間にある場合、それはまたかもしれない最後のケース(両方とも内部であるがされる前であり、端部が

@date1 < R.DataFrom AND @date2 > R.DateTo 

後です最初の二つのうちの一つでカバー。今だけ選択し、除外

SELECT * 
FROM whatever 
WHERE NOT 
    (
    (@date1 BETWEEN R.DataFrom AND R.DataTo) 
    OR 
    (@date2 BETWEEN R.DataFrom AND R.DataTo) 
    OR 
    (@date1 < R.DataFrom AND @date2 > R.DateTo) 
    ) 

簡単なのは? @Hoganの

+0

ありがとうございます!あなたのコードは動作します! – Damian

0

私はあなたの問題は、単に比較のためだと思います。これを試してみてください:

SELECT C.* 
FROM Auta C 
WHERE C.Auto_Id NOT IN 
    (SELECT 
    Auto_Id 
    FROM Rezerwacje R 
    WHERE (R.DataFrom >= @data1 
    and R.DataFrom <= @data2) 
    OR (R.DataTo >= @data1 
    and R.DataTo <= @data2)); 
+0

NOT演算子の順序が、最初の比較では、日付 –

+0

の、それはR.DataFromが日付1よりも小さいこと、そして大きくすべきであることを要求します。 –

+0

[OK]を、しかし私の答えを見て - あなたが望むことがわかるように。 – Hogan

0
SELECT C.* FROM Auta C WHERE C.Auto_Id NOT IN 
(SELECT Auto_Id 
FROM Rezerwacje R 
WHERE @data1 <= DataTo AND @data2 >= R.DataFrom) 

回答は良い点を持っていますが、それは少し複雑で、私は自分のバージョンを作ったので、副選択せずに、それはとにかく、むしろ誤解を招くおそれがあります。

+0

@の、data2は '@データ2> = R.DataFrom'が、その後DataFromとDataToの間で明らかに真である場合には、' @のdata2'がDataToとDataFrom – Hogan

+0

@Hoganの間にある場合、これは失敗します。 @ data1 <= @ data2と@ data2 <= DataTo(それは間にありますか?) '@ data1 <= DataTo'も真です。これらの区間は重複していると正しく評価され、結果から車が除外されます。 –

関連する問題