127

名前付きのテーブルがあり、Product_Salesこのようなデータを保持しています

Product_ID | Sold_by | Qty | From_date  | To_date
-----------+---------+-----+------------+-----------
3          | 12      | 7   | 2013-01-05 | 2013-01-07
6          | 22      | 14  | 2013-01-06 | 2013-01-10
8          | 11      | 9   | 2013-02-05 | 2013-02-11

ある日付範囲から 2 つの日付の間の売上データを選択したい場合のクエリは何ですか?

たとえば、 から までの売上データを選択したいとし2013-01-03ます2013-01-09

4

19 に答える 19

188

間隔交差点の説明

ご覧のとおり、作業を完了するには 2 つの方法があります。

  • 受け入れ可能なすべてのオプションを登録する
  • 間違ったオプションをすべて除外する

明らかに、2 番目の方法ははるかに単純です (4 に対して 2 つのケースのみ)。

SQL は次のようになります。

SELECT * FROM Product_sales 
WHERE NOT (From_date > @RangeTill OR To_date < @RangeFrom)
于 2014-07-27T18:56:47.873 に答える
111
SELECT * from Product_sales where
(From_date BETWEEN '2013-01-03'AND '2013-01-09') OR 
(To_date BETWEEN '2013-01-03' AND '2013-01-09') OR 
(From_date <= '2013-01-03' AND To_date >= '2013-01-09')

すべての可能性をカバーする必要があります。From_DateまたはTo_Dateが日付範囲の間にある場合や、記録日が範囲全体をカバーしている場合があります。

From_dateまたは のいずれかTo_dateが日付の間にある場合、またはがFrom_date開始日To_dateより前で終了日より後の場合。次に、この行が返されます。

于 2016-04-01T10:45:16.037 に答える
45

範囲内の日付を取得するには、次のクエリを試してください。

SELECT  *
FROM    Product_sales 
WHERE   From_date >= '2013-01-03' AND
        To_date   <= '2013-01-09'
于 2013-01-08T05:53:32.923 に答える
26
SELECT * FROM Product_sales 
WHERE From_date between '2013-01-03'
AND '2013-01-09'
于 2013-01-08T06:00:30.393 に答える
8
SELECT *
FROM Product_sales
WHERE (
From_date >= '2013-08-19'
AND To_date <= '2013-08-23'
)
OR (
To_date >= '2013-08-19'
AND From_date <= '2013-08-23'
)
于 2013-08-20T10:18:48.193 に答える
6

してみてください:

DECLARE @FrmDt DATETIME, @ToDt DATETIME
SELECT @FrmDt='2013-01-03', @ToDt='2013-01-09'

SELECT * 
FROM Product_sales 
WHERE (@FrmDt BETWEEN From_date AND To_date) OR 
    (@ToDt BETWEEN From_date AND To_date)
于 2013-01-08T06:18:00.143 に答える
4

わずか 2 セントですが、"dd-MMM-yyyy" 形式を使用するのが最も安全であることがわかりました。これは、サーバーの地域設定に関係なく、db サーバーが必要なものを認識できるためです。そうしないと、日付の地域設定が yyyy-dd-mm であるサーバーで問題が発生する可能性があります (理由は何であれ)。

したがって:

SELECT * FROM Product_sales 
WHERE From_date >= '03-Jan-2013'
AND To_date <= '09-Jan-2013'

それはいつも私にとってうまくいきました;-)

于 2013-09-30T14:53:40.383 に答える
3

このクエリを確認してください。チェックイン日が予約日と重複しているかどうかを確認するためにこのクエリを作成しました

SELECT * FROM tbl_ReservedRooms
WHERE NOT ('@checkindate' NOT BETWEEN fromdate AND todate
  AND '@checkoutdate'  NOT BETWEEN fromdate AND todate)

これにより、重複している詳細が再実行され、重複していない詳細が取得され、クエリから「NOT」が削除されます

于 2016-04-01T10:28:00.800 に答える
2
SELECT NULL  
    FROM   HRMTable hm(NOLOCK)  
    WHERE  hm.EmployeeID = 123
        AND (  
                (  
                    CAST(@Fromdate AS date) BETWEEN CAST(hm.FromDate AS date)  
                        AND CAST(hm.ToDate AS date)  
                )  
                OR (  
                    CAST(@Todate AS date) BETWEEN CAST(hm.FromDate AS date)  
                        AND CAST(hm.ToDate AS date)  
                   )  
                ) 
         )
于 2015-09-09T12:10:46.907 に答える
2

これは SQL_Server_2008 R2 で動作します

Select * 
from Product_sales
where From_date 
between '2013-01-03' and '2013-01-09'
于 2014-04-08T07:37:02.527 に答える
-1

これは簡単です。このクエリを使用して、必要なものを見つけてください。

select * from Product_Sales where From_date<='2018-04-11' and To_date>='2018-04-11'
于 2018-05-06T08:55:18.717 に答える
-1

数値を比較するのと同じように、SQL で日付を比較する必要があります。

SELECT * FROM Product_sales
WHERE From_date >= '2013-01-01' AND To_date <= '2013-01-20'
于 2013-01-08T06:00:11.290 に答える