MysqlのDATE_FORMAT関数をもっと早く知っていれば

※以前別の場所で書いた文章を備忘的に書き記しておきます。

【投稿年月日】2007-01-15 【ジャンル】PHP/MySQL


 売上を日時別に集計をする際、どうやってグループ化すればいいかちょっと悩んでいたところ、Mysqlのマニュアルを見た途端にあっさり解決。DATE_FORMAT関数を使って日付データを加工すればOKでした。
 
 備忘的に具体例を記載しておきます。(※日時を格納しているフィールド「time」の型はdatetime)
//【年別に集計】
SELECT id, DATE_FORMAT(time,'%Y年') as time1 FROM table1 GROUP BY time1

//【月別に集計】
SELECT id, DATE_FORMAT(time,'%Y年%m月') as time2 FROM table1 GROUP BY time2

//【日別に集計】
SELECT id, DATE_FORMAT(time,'%Y年%m月%d日') as time3 FROM table1 GROUP BY time3
 何が嬉しいかと言うと、日別・月別・年別にグループ化すると同時に、日時のフォーマットもやってくれるので、PHPの方でsscanfやmktime等を使っていちいち整形する必要がないことです。今までMysqlのデータについてPHPで日時のフォーマットをやっていましたが、今後はDATE_FORMATを使って一気にやってしまうと思います。
 参考までに月別集計のサンプルを残しておきます。(検証していないので間違っているかも)
<?php
$result = mysql_query("SELECT id, DATE_FORMAT(time,'%Y年%m月') as time2 FROM table1 GROUP BY time2");
echo '<table>
<tr>
<td>年月</td>
<td>id</td>
</tr>';
while($row = mysql_fetch_assoc($result)) {
echo '<tr>
<td>'.$row['time2']).'</td>
<td>'.$row['id']).'</td>
</tr>';
}
echo '</table>';
>
6.3.4. 日付と時刻関数
dev.mysql.com/doc/mysql/ja/...

 また、上記ページには「DATE_ADD」「DATE_SUB」といった時間を足したり引いたりできる関数も載っています。10日締め、20日締め、25日締め、といったケースでも、「DATE_SUB」等をうまく使えば月別集計ができるような気がします。

 やはりマニュアルをよく読まなければいけませんね。

EDIUNET | PHP/MySQL | 独り言 | 提供サービス | JavaScript