MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【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(分)として正しく変換されていることが確認できます。ログデータなど文字列形式で記録された所要時間を集計・計算したい場合に、ぜひ活用してみてください。

  1. MySQLでタイムスタンプを月に変換するクエリの書き方

    タイムスタンプを月に変換する基本構文MySQLでタイムスタンプ(UNIXタイムスタンプ)を月に変換するには、FROM_UNIXTIME()関数とMONTH()関数を組み合わせて使用します。基本的な構文は以下の通りです。select month(from_unixtime(yourColumnName)) from yourTableName;FROM_UNIXTIME()関数がUNIXタイムスタンプを日時形式に変換し、その結果に対してMONTH()関数を適用することで、月の数値(1〜12)を取得できます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> cr

  2. MySQLでLIKEをIN()のように実装するクエリの書き方

    MySQLのIN()のような動作を実現するには、LIKE演算子と組み合わせてCOUNT()関数やIF()関数を使用します。この記事では、具体的な手順をサンプルコード付きで解説します。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable    -> (    -> Subject varchar(80)    -> );Query OK, 0 rows affected (0.58 sec)