MySQLのCONV()関数で基数(進数)を変換する方法【16進数→10進数の実例つき】
MySQLのCONV()関数による基数変換とは
MySQLでは、CONV()関数を使うことで、ある基数(進数)で表現された数値を、別の基数へ簡単に変換できます。
例えば、基数16(16進数・ヘキサデシマル)から基数10(10進数・デシマル)への変換が可能です。第2引数に「変換元の基数」、第3引数に「変換先の基数」を指定します。
基本構文
SELECT CAST(CONV('yourColumnName',16,10) AS UNSIGNED INTEGER) as anyAliasName FROM yourTableName;この構文では、文字列として格納された16進数の値をCONV()関数で10進数に変換し、さらにCAST()関数でUNSIGNED INTEGER型にキャストしています。
サンプルテーブルの作成
実際の動作を確認するため、まずテーブルを作成しましょう。テーブル作成用のクエリは以下の通りです。
mysql> create table castTypeToBigIntDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Value varchar(100),
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (1.19 sec)
レコードの挿入
次に、INSERTコマンドを使ってサンプルデータを登録します。
mysql> insert into castTypeToBigIntDemo(Value) values('AB5');
Query OK, 1 row affected (0.13 sec)
mysql> insert into castTypeToBigIntDemo(Value) values('55244A5562C5566354');
Query OK, 1 row affected (0.15 sec)
mysql> insert into castTypeToBigIntDemo(Value) values('4546575765ABD78');
Query OK, 1 row affected (0.15 sec)
mysql> insert into castTypeToBigIntDemo(Value) values('5979787DEFAB');
Query OK, 1 row affected (0.19 sec)
mysql> insert into castTypeToBigIntDemo(Value) values('86868686856ABD');
Query OK, 1 row affected (0.17 sec)登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from castTypeToBigIntDemo;
実行結果は以下の通りです。
+----+--------------------+
| Id | Value |
+----+--------------------+
| 1 | AB5 |
| 2 | 55244A5562C5566354 |
| 3 | 4546575765ABD78 |
| 4 | 5979787DEFAB |
| 5 | 86868686856ABD |
+----+--------------------+
5 rows in set (0.00 sec)
16進数をBigInt(符号なし整数)にキャストするクエリ
ここで、Valueカラムの16進数の値を、10進数の大きな整数(BigInt相当)に変換するクエリを実行します。
mysql> SELECT CAST(CONV(Value,16,10) AS UNSIGNED INTEGER) as BigNumber from castTypeToBigIntDemo;
以下が出力結果です。
+----------------------+
| BigNumber |
+----------------------+
| 2741 |
| 18446744073709551615 |
| 311985829366644088 |
| 98378247434155 |
| 37865559219858109 |
+----------------------+
5 rows in set, 1 warning (0.00 sec)
補足:変換時の注意点
CONV()関数の戻り値は、符号なし64ビット整数の最大値「18446744073709551615」(2の64乗-1)が上限となります。変換元の値がこの範囲を超える場合は最大値に丸められ、警告(warning)が発生します。上記の出力では2行目が上限値になっていることが確認でき、「1 warning」と表示されているのもこのためです。大きな桁数の16進数を扱う際は、この仕様に留意しておきましょう。
-
MySQLでタイムスタンプを月に変換するクエリの書き方
タイムスタンプを月に変換する基本構文MySQLでタイムスタンプ(UNIXタイムスタンプ)を月に変換するには、FROM_UNIXTIME()関数とMONTH()関数を組み合わせて使用します。基本的な構文は以下の通りです。select month(from_unixtime(yourColumnName)) from yourTableName;FROM_UNIXTIME()関数がUNIXタイムスタンプを日時形式に変換し、その結果に対してMONTH()関数を適用することで、月の数値(1〜12)を取得できます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> cr
-
MySQLで異なる列を持つ別テーブルへレコードをコピーする方法(INSERT INTO SELECT活用)
あるテーブルから、列名や構成が異なる別のテーブルへレコードをコピーしたい場合、INSERT INTO SELECT 文を使用します。この記事では、実際にサンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。 ステップ1:コピー元のテーブルを作成する まずはコピー元となるテーブル「DemoTable1900」を作成します。ClientIdは自動採番(AUTO_INCREMENT)とし、初期値を1000に設定しています。また、ClientAgeにはデフォルト値29を設定しました。 mysql> create table DemoTable1900 ( Clie