MySQLでTIME・DATETIMEの値を数値形式に変換する方法をわかりやすく解説
MySQLでは、TIME(N)やDATETIME(N)の値を数値形式に変換したい場合、その値に+0(ゼロを足す)だけで実現できます。非常にシンプルなテクニックですが、覚えておくと便利です。
変換結果は、小数点以下の桁数Nの値によって異なり、以下のようなルールで決まります。
Nが0の場合:整数(INTEGER)に変換される
TIME(N)およびDATETIME(N)のNが0の場合、これらの値は整数型として変換されます。
例えば、現在時刻を返すCURTIME()や、現在の日時を返すNOW()の値は、次のように+0することで整数値へと変換できます。
mysql> SELECT CURTIME(), CURTIME()+0; +-----------+-------------------+ | CURTIME() | CURTIME()+0 | +-----------+-------------------+ | 19:42:54 | 194254 | +-----------+-------------------+ 1 row in set (0.04 sec) mysql> SELECT NOW(), NOW()+0; +-------------------------+----------------------------------+ | NOW() | NOW()+0 | +-------------------------+----------------------------------+ | 2017-10-27 19:43:43 | 20171027194343 | +-------------------------+----------------------------------+ 1 row in set (0.00 sec)
このように、「19:42:54」は「194254」、「2017-10-27 19:43:43」は「20171027194343」という形式の整数になります。コロンやハイフンなどの区切り文字が取り除かれ、数値として連結されるのがポイントです。
Nが0より大きい場合:小数(DECIMAL)に変換される
一方、Nが0より大きい場合、つまりマイクロ秒などの小数部分を持つ値に対しては、DECIMAL(小数)形式で変換されます。
同様に、CURTIME(3)やNOW(3)を使った例を見てみましょう。
mysql> SELECT CURTIME(), CURTIME(3)+0; +-----------+-------------------+ | CURTIME() | CURTIME()+0 | +-----------+-------------------+ | 19:47:40 | 194740.575 | +-----------+-------------------+ 1 row in set (0.04 sec) mysql> SELECT NOW(), NOW(3)+0; +-------------------------+----------------------------------+ | NOW() | NOW()+0 | +-------------------------+----------------------------------+ | 2017-10-27 19:48:45 | 20171027194845.589 | +-------------------------+----------------------------------+ 1 row in set (0.00 sec)
この例では、時刻「19:47:40」が「194740.575」、日時「2017-10-27 19:48:45」が「20171027194845.589」という小数値に変換されています。小数点以下の数値はミリ秒(3桁指定の場合)を表しています。
まとめ
- N=0の場合 → 整数(INTEGER)形式に変換される
- N>0の場合 → 小数(DECIMAL)形式に変換される
この変換テクニックは、日時データをソートキーや計算処理に使いたい場合などに役立ちます。ぜひ活用してみてください。
-
MySQLでchar型カラムをdatetime型に変換する方法をわかりやすく解説
MySQLでは、char型として保存された日付文字列をdatetime形式に変換したいケースがあります。本記事では、REPLACE関数とSTR_TO_DATE関数を組み合わせて、「12/31/2017 10:50」のような米国式の日付文字列を「2017-12-31 10:50:00」というdatetime形式へ変換する手順を、実際のSQLと実行結果付きで解説します。サンプルテーブルの作成まず、テーブルを作成します。ここでは配送日(ShippingDate)をあえてchar型として宣言しています。mysql> create table DemoTable1472 &n
-
MySQLでvarchar型の時刻データを正しい時間形式に変換する方法
varchar型として保存された「1620」や「2345」のような時刻データを、実際の時間形式(例:04:20)に変換したい場合、MySQLのTIME_FORMAT()関数を使用することで実現できます。この記事では、SUBSTRING()とCONCAT()を組み合わせて、4桁の文字列を「時:分」の形式に整形する手順を解説します。1. サンプルテーブルの作成まず、到着時刻をvarchar型で格納するテーブルを作成します。mysql> create table DemoTable1591 -> ( -> ArrivalTime varchar(20) -&