MySQLでvarchar型の時刻データを正しい時間形式に変換する方法
varchar型として保存された「1620」や「2345」のような時刻データを、実際の時間形式(例:04:20)に変換したい場合、MySQLのTIME_FORMAT()関数を使用することで実現できます。
この記事では、SUBSTRING()とCONCAT()を組み合わせて、4桁の文字列を「時:分」の形式に整形する手順を解説します。
1. サンプルテーブルの作成
まず、到着時刻をvarchar型で格納するテーブルを作成します。
mysql> create table DemoTable1591
-> (
-> ArrivalTime varchar(20)
-> );
Query OK, 0 rows affected (0.58 sec)2. レコードの挿入
INSERTコマンドを使って、いくつかの時刻データを挿入します。
mysql> insert into DemoTable1591 values('1620');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1591 values('2345');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1591 values('2210');
Query OK, 1 row affected (0.12 sec)3. テーブルの内容を確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1591;
以下の出力が得られます。
+-------------+ | ArrivalTime | +-------------+ | 1620 | | 2345 | | 2210 | +-------------+ 3 rows in set (0.00 sec)
4. TIME_FORMAT()で時刻形式に変換
ここがポイントです。SUBSTRING()で先頭2文字(時)と残りの文字(分)を取り出し、CONCAT()でコロン「:」を挟んで連結した上で、TIME_FORMAT()に渡します。
mysql> select TIME_FORMAT(CONCAT(SUBSTRING(ArrivalTime, 1,2), ':', SUBSTRING(ArrivalTime, 3,4)), '%h:%i') from DemoTable1591;
実行結果は以下のとおりです。
+---------------------------------------------------------------------------------------------+ | TIME_FORMAT(CONCAT(SUBSTRING(ArrivalTime, 1,2), ':', SUBSTRING(ArrivalTime, 3,4)), '%h:%i') | +---------------------------------------------------------------------------------------------+ | 04:20 | | 11:45 | | 10:10 | +---------------------------------------------------------------------------------------------+ 3 rows in set (0.00 sec)
処理の流れの解説
- SUBSTRING(ArrivalTime, 1, 2):文字列の1文字目から2文字分を抽出し、「時」の部分を取得します(例:「1620」→「16」)。
- SUBSTRING(ArrivalTime, 3, 4):3文字目以降を抽出し、「分」の部分を取得します(例:「1620」→「20」)。
- CONCAT():「16」「:」「20」を連結して「16:20」という時刻形式の文字列を作ります。
- TIME_FORMAT(..., '%h:%i'):%hは12時間表記の時、%iは分を意味します。そのため「1620」は「04:20」、「2345」は「11:45」、「2210」は「10:10」と表示されます。
補足:24時間表記で表示したい場合
24時間表記で出力したい場合は、フォーマット指定子を%H:%iに変更してください。
mysql> select TIME_FORMAT(CONCAT(SUBSTRING(ArrivalTime, 1,2), ':', SUBSTRING(ArrivalTime, 3,4)), '%H:%i') from DemoTable1591;
この場合、「1620」は「16:20」、「2345」は「23:45」と表示され、元のデータが持つ時刻情報がそのまま反映されます。
このように、TIME_FORMAT()と文字列関数を組み合わせれば、varchar型で保存された時刻データもSQLクエリだけで簡単に整形できます。なお、頻繁に時刻計算を行う場合は、カラムの型をTIME型に変更しておくことをおすすめします。
-
【MySQL】VARCHAR型・TIME型の時刻データを合計する方法
MySQLでは、TIME型やVARCHAR型として保存された時刻データを、そのままSUM()関数で合計することができません。そんなときに便利なのが、TIME_TO_SEC()関数とSEC_TO_TIME()関数を組み合わせる方法です。時刻を一度秒数に変換して合計し、その結果を再び時刻形式に戻すことで、正確な合計時間を求められます。 テーブルを作成する まず、TIME型のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1442 -> ( -> DueTime time -> ); Query OK,
-
MySQLで日付形式を変換する方法|STR_TO_DATE()関数の使い方を解説
MySQLでは、VARCHAR型などで保存された文字列の日付データを、正しい日付・時刻形式に変換したいケースがよくあります。そんなときに活躍するのが STR_TO_DATE() 関数です。この記事では、実際のSQL例とともに具体的な使い方を解説します。サンプルテーブルの作成まず、日付を文字列として格納するテーブルを作成します。mysql> create table DemoTable2010 ( DueDate varchar(20) ); Query OK, 0 rows affected (0.68 sec)テストデータの挿入INSERT文を使って、「日/月/年 時:分:秒」