MySQLはクエリの日付を年月ごとにアーカイブします

4246 ワード

【知識準備】
1.使用したMySQL日付関数:
関数#カンスウ#
機能
DATE_FORMAT(date, fnt)
文字列fmtでフォーマットされた日付date値を返します
2.使用したMySQLの日付と時刻のフォーマット:
書式
フォーマットの説明
%Y
4桁の数字で表示される年、例えば2016、2017、2018...(注意Yは大文字)
%m
2桁の数字は、01、02、03などの月を表しています.(注意mは小文字)
例:現在時刻を年月日形式に変更(現在時刻は2016年3月15日23:03:03)
mysql> select DATE_FORMAT(NOW(), '%Y%m'); --            
+----------------------------+
| DATE_FORMAT(NOW(), '%Y%m') |
+----------------------------+
| 201603                     |
+----------------------------+
1 row in set (0.00 sec)

この例では、データベース・テーブルの構造を示します.
mysql> desc blog.blog_article;
+-------------------+--------------+------+-----+---------+----------------+
| Field             | Type         | Null | Key | Default | Extra          |
+-------------------+--------------+------+-----+---------+----------------+
| _id               | int(11)      | NO   | PRI | NULL    | auto_increment |
| _content          | text         | NO   |     | NULL    |                |
| _create_time      | datetime     | YES  |     | NULL    |                |
| _is_allow_comment | bit(1)       | YES  |     | b'1'    |                |
| _is_delete        | bit(1)       | YES  |     | b'0'    |                |
| _order            | int(11)      | YES  |     | NULL    |                |
| _title            | varchar(255) | NO   |     | NULL    |                |
| _author           | int(11)      | YES  | MUL | NULL    |                |
+-------------------+--------------+------+-----+---------+----------------+
8 rows in set (0.03 sec)

この例のデータベース・テーブル・データ:
mysql> select * from blog.blog_article \G;
*************************** 1. row ***************************
              _id: 1
         _content: 

_create_time: 2016-01-03 13:26:57 _is_allow_comment: _is_delete: _order: 0 _title: _author: 1 *************************** 2. row *************************** _id: 2 _content:

_create_time: 2016-03-11 19:40:06 _is_allow_comment: _is_delete: _order: 0 _title: _author: 1 *************************** 3. row *************************** _id: 3 _content:

_create_time: 2016-03-15 20:12:50 _is_allow_comment: _is_delete: _order: 0 _title: _author: 1 3 rows in set (0.00 sec)

【例】
1.データベース・テーブルの_create_timeフィールドは年月降順にアーカイブされる.
mysql> select distinct DATE_FORMAT(a._create_time, '%Y%m') from blog.blog_article as a order by a._create_time DESC;
+-------------------------------------+
| DATE_FORMAT(a._create_time, '%Y%m') |
+-------------------------------------+
| 201603                              |
| 201601                              |
+-------------------------------------+
2 rows in set (0.00 sec)

2.アーカイブ時にフォーマット上の修飾をすることもできます.
mysql> select distinct DATE_FORMAT(a._create_time, '%Y %m ') from blog.blog_article as a order by a._create_time DESC;
+-------------------------------------------+
| DATE_FORMAT(a._create_time, '%Y %m ')   |
+-------------------------------------------+
| 2016 03                                 |
| 2016 01                                 |
+-------------------------------------------+
2 rows in set (0.00 sec)

3.クエリー_create_timeの2016年3月のデータ;
mysql> select * from blog.blog_article as a where DATE_FORMAT(a._create_time, '%Y%m') = '201603' \G;
*************************** 1. row ***************************
              _id: 2
         _content: 

_create_time: 2016-03-11 19:40:06 _is_allow_comment: _is_delete: _order: 0 _title: _author: 1 *************************** 2. row *************************** _id: 3 _content:

_create_time: 2016-03-15 20:12:50 _is_allow_comment: _is_delete: _order: 0 _title: _author: 1 2 rows in set (0.00 sec)