MYSQLでの日付比較演算子の確認

## 月跨ぎでページがエラーになってしまっていた。


$query = "select GET_D,TRUNCATE(avg(TAKEN),2) AVGT from T_Confirmation
where GET_D > CURDATE() - 8 group by GET_D";

## DB側にてデータの確認

mysql> select GET_D,TRUNCATE(avg(TAKEN),2) AVGT from T_Confirmation
where GET_D > CURDATE() - 8 group by GET_D;
Empty set, 1 warning (0.02 sec)

## データはあるので、where句の部分を確認。
## 実際にQueryを実行してみると以下のような日付が返ってきた。


mysql>select CURDATE() - 8;
+---------------+
| CURDATE() - 8 |
+---------------+
| 20100893 |
+---------------+
1 row in set (0.00 sec)


mysql> select CURRENT_DATE() - 8;
+--------------------+
| CURRENT_DATE() - 8 |
+--------------------+
| 20100893 |
+--------------------+
1 row in set (0.00 sec)

## 日付の表示を正しいものに修正する為に、DATA_ADDを利用する事にした。

mysql> SELECT DATE_ADD(CURRENT_DATE,INTERVAL 8 DAY);
+—————————————+
| DATE_ADD(CURRENT_DATE,INTERVAL 8 DAY) |
+—————————————+
| 2010-09-09 |
+—————————————+
1 row in set (0.00 sec)

mysql> SELECT DATE_ADD(CURRENT_DATE,INTERVAL -8 DAY);
+—————————————-+
| DATE_ADD(CURRENT_DATE,INTERVAL -8 DAY) |
+—————————————-+
| 2010-08-24 |
+—————————————-+
1 row in set (0.00 sec)

mysql>

## 正しくデータが表示される事を確認

mysql> select GET_D,TRUNCATE(avg(TAKEN),2) AVGT from T_Confirmationwhere GET_D > DATE_ADD(CURRENT_DATE,INTERVAL -8 DAY) group by GET_D;
+————+——+
| GET_D | AVGT |
+————+——+
| 2010-08-25 | 0.77 |
| 2010-08-26 | 0.48 |
| 2010-08-27 | 0.32 |
| 2010-08-28 | 0.30 |
| 2010-08-29 | 0.28 |
| 2010-08-30 | 0.35 |
| 2010-08-31 | 0.34 |
+————+——+
7 rows in set (0.02 sec)

mysql>


select substring(GET_T,1,2) as GET_T,COUNT(*) as TOTAL from
T_Confirmation where MONTH(GET_D)= MONTH(DATE_ADD(CURRENT_DATE,INTERVAL -1 DAY))
AND TAKEN >= 10 Group by substring(GET_T,1,2);

MONTH(DATE_ADD(CURRENT_DATE,INTERVAL -1 DAY))

## 全てのPHPファイルを修正する為に、ワンライナーで一気に書き換えで終了。
## ワンライナーでフォルダー配下のPHPを全て修正して解決!!

perl -pi -e 's/CURDATE\(\) - 8/DATE_ADD\(CURRENT_DATE,INTERVAL -8 DAY\)/' *.php