2

学区とその開始日と終了日が記載されたテーブルがあります。

| yrq | start_date | end_date |
| -------------------------- |
| B233 | 2013-01-07 | 2013-03-23 |
| B232 | 2012-09-24 | 2012-12-20 |
| B231 | 2012-06-25 | 2012-09-13 |
| B124 | 2012-04-02 | 2012-06-21 |
| B123 | 2012-01-09 | 2012-03-27 |
..。

yrqを排他的に取得します。つまり、yrqは完全に日付範囲内にあります。

SELECT yrq FROM yrq WHERE start_date>='2012-02-01' AND end_date<='2013-02-01';

B124, B231, B232日付がと内にある場合でもB233、最初と最後の年を除くすべてが返されます( ) B123。行ってもいい!

yrqを包括的に取得する方法を見つけました。つまり、日付がyrqの真ん中にある場合は、それを含めます(「<」と「>」の記号を反転し、開始日と終了日を渡します)。

SELECT yrq FROM yrq WHERE start_date<='2013-02-01' AND end_date>='2012-02-01';

これにより、リストされているすべての四半期が返され、他の四半期は返されません。行ってもいい!

私が問題を抱えているクエリは、開始日と終了日が完全にその中にあるyrqを取得することです。例:日付範囲のyrqを検索したいのです2013-02-012013-02-15、これはになりますB233

クエリを実行するphp関数を呼び出しています。私は包括的フラグを渡していますが、答えがない場合は包括的ケースで結果を返す必要があります。すべての包括的ケースをカプセル化するために、私は最初に答えがないクエリを実行することを計画していました。それが空のセットを返す場合は、上記の包括的クエリを実行します。もっとエレガントな方法があれば、私はすべての耳です。

ありがとう!

4

1 に答える 1

1

このクエリは、パラメータがstart_dateとend_date内にあるyrqを返します。これはあなたが探しているものですか?

SELECT *
  FROM yrq
 WHERE '2013-02-01' BETWEEN start_date AND end_date
   AND '2013-02-15' BETWEEN start_date AND end_date

フィドル

于 2013-02-21T07:56:06.163 に答える