0

次のようなクエリが必要です。

SELECT *
FROM myTable
WHERE
    DATE_FORMAT(date,'%Y-%m-%d') BETWEEN <1> AND <2>

どこ<1>で は月の最初の日の<2>日付で、 は 5 日前の日付です。たとえば、現在の日付が 2013-03-14 の場合、<1>2013-03-01 と 2013-03-09 にする必要があり<2>ます。

これどうやってするの?

4

2 に答える 2

1

クエリ:

SQLFIDDLEExample

SELECT 
DATE_FORMAT(NOW(),'%Y-%m-%d') d1,
DATE_FORMAT(NOW(),'%Y-%m-01') d2,
DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -5 DAY),'%Y-%m-%d') d3

結果:

|         D1 |         D2 |         D3 |
----------------------------------------
| 2013-03-14 | 2013-03-01 | 2013-03-09 |

それで:

SELECT *
FROM myTable
WHERE DATE_FORMAT(date,'%Y-%m-%d') 
BETWEEN DATE_FORMAT(NOW(),'%Y-%m-01') 
AND DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -5 DAY),'%Y-%m-%d')

このクエリは、関数を使用して列をフォーマットしているため、おそらくINDEXを使用しません。DATE_FORMAT(date,'%Y-%m-%d')

ただし、列のdateデータ型が次のDatetime場合にクエリを実行できる場合:

SELECT *
FROM myTable
WHERE date >= DATE_FORMAT(CURDATE(),'%Y-%m-01') 
AND date <= DATE_ADD(CURDATE(), INTERVAL -5 DAY)
于 2013-03-14T19:52:00.580 に答える
1
SELECT * 
FROM myTable 
WHERE 
    DATE_FORMAT(date,'%Y-%m-%d') BETWEEN 
        concat(extract(year_month FROM CURDATE()),"01") 
        AND 
        from_days(to_days(CURDATE())-5)
于 2013-03-14T19:53:16.080 に答える