【MySQL】「1時間15分」のような文字列を75分(数値)に変換するクエリの書き方
MySQLでは、str_to_date()関数とtime_to_sec()関数を組み合わせることで、「1h 15 min」のような時間を表す文字列を分単位の数値に変換できます。ここでは、実際にテーブルを作成し、文字列を数値へ変換する手順を解説します。
1. サンプルテーブルの作成
まず、文字列を格納するためのテーブルを作成しましょう。
mysql> create table DemoTable
(
stringDate varchar(100)
);
Query OK, 0 rows affected (0.86 sec)2. レコードの挿入
insertコマンドを使って、変換対象となるレコードを挿入します。
mysql> insert into DemoTable values('1h 15 min');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable values('2h 30 min');
Query OK, 1 row affected (0.21 sec)3. レコードの確認
select文ですべてのレコードを表示して、登録内容を確認しておきましょう。
mysql> select *from DemoTable;
出力結果
+------------+ | stringDate | +------------+ | 1h 15 min | | 2h 30 min | +------------+ 2 rows in set (0.00 se
4. 文字列を分単位の数値に変換するクエリ
以下が「1h 15 min」のような文字列を75(分)という数値に変換するクエリです。まずstr_to_date()で書式指定子%l h %i minを使って文字列を時刻として解析し、time_to_sec()で秒に変換した後、60で割ることで分単位の値を求めます。
ポイントは、「時間+分」を含むパターンと「分のみ」のパターンに対応できるよう、2つのSELECT文をUNION ALLで結合しているところです。having second is not nullにより、パターンに一致しない行は自動的に除外されます。
mysql> select time_to_sec(str_to_date(stringDate, '%l h %i min')) / 60 second from DemoTable having second is not null union all select time_to_sec(str_to_date(stringDate, '%i min')) / 60 second from DemoTable having second is not null;
出力結果
+----------+ | second | +----------+ | 75.0000 | | 150.0000 | +----------+ 2 rows in set, 2 warnings (0.04 sec)
このように、「1h 15 min」が75(分)、「2h 30 min」が150(分)として正しく変換されていることが確認できます。ログデータなど文字列形式で記録された所要時間を集計・計算したい場合に、ぜひ活用してみてください。
-
MySQLでタイムスタンプを月に変換するクエリの書き方
タイムスタンプを月に変換する基本構文MySQLでタイムスタンプ(UNIXタイムスタンプ)を月に変換するには、FROM_UNIXTIME()関数とMONTH()関数を組み合わせて使用します。基本的な構文は以下の通りです。select month(from_unixtime(yourColumnName)) from yourTableName;FROM_UNIXTIME()関数がUNIXタイムスタンプを日時形式に変換し、その結果に対してMONTH()関数を適用することで、月の数値(1〜12)を取得できます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> cr
-
MySQLでLIKEをIN()のように実装するクエリの書き方
MySQLのIN()のような動作を実現するには、LIKE演算子と組み合わせてCOUNT()関数やIF()関数を使用します。この記事では、具体的な手順をサンプルコード付きで解説します。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable -> ( -> Subject varchar(80) -> );Query OK, 0 rows affected (0.58 sec)