2

RECORDSMySQL テーブルは次のとおりです。

ID - BIGINT(20)
DATE - DATE

記録:

ID Date
1  2014-03-01
2  2014-03-02
3  2014-04-01
4  2014-04-02

最初のクエリは次のとおりです。

SELECT id, DATE_FORMAT(date,'%d/%m/%Y') AS date FROM records
WHERE
date >= STR_TO_DATE('01/04/2014','%d/%m/%Y') AND
date <= STR_TO_DATE('30/04/2014','%d/%m/%Y') 

すべて問題ありません。結果は次のとおりです。

3,2014-04-01
4,2014-04-02

しかし、次のようなサブクエリで日付範囲を取得しようとすると:

SELECT * 
FROM (SELECT id, DATE_FORMAT(date,'%d/%m/%Y') AS date 
      FROM records) AS TEST
WHERE
date >= STR_TO_DATE('01/04/2014','%d/%m/%Y') AND
date <= STR_TO_DATE('30/04/2014','%d/%m/%Y') 

空の結果セット (つまり、ゼロ行) が得られます。

私の間違いはどこですか?

4

3 に答える 3

2

私が理解している限り、日付を%d/%m/%Y形式で返すだけです。質問の最初のクエリで取得した結果は、実際にこの変換された日付を生成します。それが使用したクエリでよろしいですか?

いずれにせよ、これがあなたの望むものであれば、クエリを次のように変更する必要があると思います:

SELECT id, DATE_FORMAT(date,'%d/%m/%Y') AS datestring FROM records
WHERE
date >= STR_TO_DATE('01/04/2014','%d/%m/%Y') AND
date <= STR_TO_DATE('30/04/2014','%d/%m/%Y')

エイリアスではなく比較で日付列が使用されていますが、それは物事を明確にしていると思います。

最初のクエリが目的の結果を返していることがわかるように、結果を示すSQLFiddleを次に示します。

于 2014-05-10T12:16:17.677 に答える