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

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進数を扱う際は、この仕様に留意しておきましょう。

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

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

  2. MySQLで異なる列を持つ別テーブルへレコードをコピーする方法(INSERT INTO SELECT活用)

    あるテーブルから、列名や構成が異なる別のテーブルへレコードをコピーしたい場合、INSERT INTO SELECT 文を使用します。この記事では、実際にサンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。 ステップ1:コピー元のテーブルを作成する まずはコピー元となるテーブル「DemoTable1900」を作成します。ClientIdは自動採番(AUTO_INCREMENT)とし、初期値を1000に設定しています。また、ClientAgeにはデフォルト値29を設定しました。 mysql> create table DemoTable1900 ( Clie