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

MySQLで16進数を操作する方法とは?CONV()関数を使った基数変換を解説

MySQLで16進数を操作するには、CONV()関数を使用します。CONV()関数は、ある基数(進数)から別の基数へ数値を変換できる組み込み関数です。基本的な構文は以下の通りです。

SET anyVariableName = CONV(yourHexValue, 16, 10);

第1引数に変換したい値、第2引数に元の基数、第3引数に変換後の基数を指定します。上記の例では、16進数の値を10進数へ変換しています。

ストアドプロシージャで16進数を10進数に変換する

実際の動作を理解するために、16進数を10進数へ変換するストアドプロシージャを作成してみましょう。作成用のクエリは以下の通りです。

mysql> DELIMITER //
mysql> CREATE PROCEDURE SP_HEX_TO_DEC( HEXVALUE VARCHAR(10) )
    -> BEGIN
    -> DECLARE Decimalvalue INTEGER;
    -> SET Decimalvalue = CONV(HEXVALUE,16,10);
    -> select Decimalvalue;
    -> END;
    -> //
Query OK, 0 rows affected (0.19 sec)
mysql> DELIMITER ;

このストアドプロシージャは、引数として渡された16進数の値を10進数に変換して返します。16進数では「A」が10進数の「10」を表すため、ここでは「A」をパラメータとして渡してみます。

ストアドプロシージャの呼び出し方

ストアドプロシージャはCALLコマンドで呼び出します。構文は以下の通りです。

CALL yourStoredProcedureName;

先ほど作成したプロシージャを呼び出すクエリは次のようになります。

mysql> call SP_HEX_TO_DEC('A');

実行結果は以下の通りです。ストアドプロシージャによって計算された10進数の値が表示されます。

+--------------+
| Decimalvalue |
+--------------+
| 10        |
+--------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)

SELECT文で直接変換する方法

ストアドプロシージャを作らなくても、SELECT文でCONV()関数を直接実行すれば簡単に変換できます。

mysql> select conv('AB',16,10) as DecimalResult;

実行結果は以下の通りです。

+---------------+
| DecimalResult |
+---------------+
| 171        |
+---------------+
1 row in set (0.00 sec)

16進数から10進数への変換ルール

最後に、16進数がどのように10進数へ変換されるのか、その仕組みを確認しておきましょう。「AB」の場合、16進数におけるAとBはそれぞれ「10」と「11」を表します。10進数への変換は以下のルールに従います。

A と B は16進数でそれぞれ 10 と 11 を表します。
10進数への変換ルールは以下の通りです:
N ……… +value3 × 162 + value2 × 161 + value1 × 160
= 10 × 161 + 11 × 160
= 160 + 11
= 171

つまり「AB」は「10×16+11×1=171」と計算され、CONV()関数の実行結果と一致します。このように、各桁の値に16のべき乗を掛けて合計することで、16進数を10進数へ変換できます。日常的にはCONV()関数を使えば自動的に変換されるため、覚えておくと非常に便利です。

  1. PHPとMySQLで時刻を扱う方法|strtotime()とDATE_FORMAT()による形式変換

    PHPで時刻形式を変換する方法 PHPで時刻データを扱う際、strtotime()関数を使えば、「8:55 PM」のような人間が読みやすい12時間制の表記を、データベースで扱いやすい24時間制(HH:MM:SS)へ簡単に変換できます。 PHPコード例 $timeValue = 8:55 PM; $changeTimeFormat = date(H:i:s, strtotime($timeValue)); echo(24時間制への変換結果=); echo($changeTimeFormat); このコードでは、まずstrtotime()が文字列「8:55 PM」をUNIXタイムスタンプに変換

  2. MySQLでAUTO_INCREMENT列を扱う方法を徹底解説

    MySQLでは、AUTO_INCREMENT属性を使うことで、新しい行に対して自動的に一意の番号(識別子)を割り当てることができます。本記事では、AUTO_INCREMENT列の基本的な使い方、動作の仕組み、そして利用時に守るべきルールについて、実例とともにわかりやすく解説します。基本的な使い方まずは、以下のクエリを見てみましょう。テーブルを作成し、データを挿入した結果を確認します。クエリ例CREATE TABLE tableName (    id MEDIUMINT NOT NULL AUTO_INCREMENT,