MySQLで日・月・年のフィールドから日付を作成する方法
MySQLでは、組み込み関数 STR_TO_DATE() を使うことで、「日」「月」「年」に分かれた3つのカラムから1つの日付値を簡単に生成できます。
STR_TO_DATE()を使った日付作成の基本構文
構文は以下の通りです。
SELECT STR_TO_DATE(CONCAT(yourYearColumName,'-',LPAD(yourMonthColumName,2,'00'),'-',LPAD(yourDayColumName,2,'00')), '%Y-%m-%d') as anyVariableName from yourTableName;
この構文のポイントは次のとおりです。
- CONCAT(): 年・月・日を「YYYY-MM-DD」形式の文字列として連結します。
- LPAD(カラム名, 2, '00'): 月や日が1桁の場合(例:5月→「05」)、先頭を0で埋めて2桁に揃えます。これによりフォーマット指定子との整合性が保たれます。
- STR_TO_DATE(..., '%Y-%m-%d'): 連結した文字列を「%Y(年)-%m(月)-%d(日)」の形式指定に従ってDATE型に変換します。
動作確認用テーブルの作成
構文の理解を深めるため、実際にテーブルを作成してみましょう。テーブル作成クエリは以下の通りです。
mysql> create table DateCreateDemo -> ( -> `Day` varchar(2), -> `Month` varchar(2), -> `Year` varchar(4) -> ); Query OK, 0 rows affected (1.68 sec)
テストデータの挿入
INSERTコマンドですべてのフィールドに値を挿入します。クエリは以下の通りです。
mysql> insert into DateCreateDemo values('15','12','2018');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DateCreateDemo values('10','11','2016');
Query OK, 1 row affected (0.37 sec)
mysql> insert into DateCreateDemo values('12','6','2017');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DateCreateDemo values('9','8','2019');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DateCreateDemo values('10','5','2020');
Query OK, 1 row affected (0.09 sec)登録データの確認
SELECT文でテーブル内の全レコードを表示します。
mysql> select *from DateCreateDemo;
実行結果は以下の通りです。
+------+-------+------+ | Day | Month | Year | +------+-------+------+ | 15 | 12 | 2018 | | 10 | 11 | 2016 | | 12 | 6 | 2017 | | 9 | 8 | 2019 | | 10 | 5 | 2020 | +------+-------+------+ 5 rows in set (0.00 sec)
3つのフィールドから日付を生成する
それでは、「Day」「Month」「Year」の3つのフィールドを組み合わせて日付を作成してみます。クエリは以下の通りです。
mysql> select -> STR_TO_DATE(CONCAT(Year,'-',LPAD(Month,2,'00'),'-',LPAD(day,2,'00')), '%Y-%m-%d') as DateDemo from DateCreateDemo;
実行結果は以下の通りです。
+------------+ | DateDemo | +------------+ | 2018-12-15 | | 2016-11-10 | | 2017-06-12 | | 2019-08-09 | | 2020-05-10 | +------------+ 5 rows in set (0.06 sec)
このように、月や日が1桁のデータ(例:「6」「9」)もLPAD関数によって自動的に「06」「09」と整形され、正しい日付形式「YYYY-MM-DD」へ変換されていることがわかります。
まとめ
分離された年・月・日のカラムを持つレガシーなテーブルでも、STR_TO_DATE() と CONCAT()、LPAD() を組み合わせれば、追加のカラムを作らずにSQLだけで日付型への変換が可能です。WHERE句での期間検索やORDER BYによる日付ソートなどにもそのまま活用できるため、覚えておくと非常に便利なテクニックです。
-
PHPのdate_parse()関数でタイムスタンプから日・月・年を抽出する方法
date_parse()関数でタイムスタンプを解析するPHPでタイムスタンプ(日時文字列)から日・月・年を抽出するには、date_parse() 関数を使用します。この関数は日時文字列を解析し、年・月・日・時・分・秒などの情報を連想配列として返してくれます。基本構文は以下の通りです。print_r(date_parse(anyTimeStampValue));サンプルコード具体的なタイムスタンプ値を解析するPHPコードは以下のようになります。$yourTimeStampValue="2019-02-04 12:56:50"; print_r(date_parse($your
-
MySQLで日付データから月の初日と末日を取得する方法
MySQLでは、日付型のカラムから「その月の最初の日」と「最後の日」を簡単に求めることができます。この記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。1. テーブルの作成まず、日付を格納するためのテーブルを作成します。mysql> create table DemoTable -> ( -> DueDate date -> ); Query OK, 0 rows affected (0.73 sec)2. レコードの挿入次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。mysql>