2

次のようなテーブル構造があります

id | startDay | startMonth | startYear | endDay | endMonth | endYear    
1  | 22       | 12         | 2012      | 25     | 1        | 2013  

これで、 startDate,startMonth, startYear 、つまり25|12|2012と endDay,endMonth,endYear 、つまり10|1|2013のような別の日付範囲ができました。

指定された日付範囲がテーブルに存在するテーブルからレコードを取得するクエリが必要です。この場合、最初に記録することを意味します。
これに対するクエリの書き方は?

4

2 に答える 2

4

この構造を捨てて、ネイティブの日付フィールドを使用します。

id start_date  end_date
1  2012-12-22  2013-1-25

次に、ネイティブの mysql 日付/時刻関数と比較を使用できます。

SELECT id WHERE yourdate BETWEEN start_date AND end_date

そのような断片化された値を適切に比較するために、恐ろしく醜いマルチレベル比較を使用する代わりに:

SELECT id where YEAR(yourdate) < startYear OR (YEAR(yourdate) > startYear AND MONTH(yourdate) < startMOnth) etc... etc....etc..
于 2012-12-24T04:02:05.970 に答える
3

まず、@ MarcBのアドバイスを参考にしてください。ただし、テーブルを変更する時間がない場合は、次のクエリを使用することもできます。

SELECT *
FROM tableName
WHERE ('2012-12-25' BETWEEN DATE(CONCAT_WS('-', startYear, startMonth, startDay)) AND
                  DATE(CONCAT_WS('-', endYear, endMonth, endDay))) AND
      ('2013-01-10' BETWEEN DATE(CONCAT_WS('-', startYear, startMonth, startDay)) AND
                  DATE(CONCAT_WS('-', endYear, endMonth, endDay))) 
于 2012-12-24T04:08:50.983 に答える