次のwhere句があります
AND DATE_FORMAT( l.created_on, "%d/%m/%Y" ) BETWEEN '06/02/2013' AND '07/02/2013'
はcreated_on
タイムスタンプです。
何らかの理由で、クエリは前の月の行も返します。誰かが理由を知っていますか?
ノート :
日付をその特定の形式にする必要があります
Mysql 文字列の日付形式は、パターン yyyy-mm-dd に従います。タイムスタンプがある場合は日付に変換しないでください。タイムスタンプを比較するだけです。
WHERE l.created_on
BETWEEN UNIX_TIMESTAMP('2012/02/06') AND UNIX_TIMESTAMP('2013/02/07')
がcreated_on
すでに日付 ( datatype ) の場合、
を使用して直接クエリを実行できます。
WHERE created_on BETWEEN '2013-02-06' AND '2013-02-07'
ただし、日付が文字列の場合は使用しますSTR_TO_DATE
WHERE STR_TO_DATE(l.created_on, '%d-%m-%Y') BETWEEN '2013-02-06' AND '2013-02-07'
更新 1
入力した日付の形式を変更したくないので、次を使用して形式を設定する必要がありますSTR_TO_DATE
WHERE l.created_on BETWEEN STR_TO_DATE('06/02/2013','%d/%m/%Y') AND
STR_TO_DATE('07/02/2013','%d/%m/%Y')