MySQLで数値として格納された文字列同士を比較する方法|CAST()関数の使い方を解説
MySQLでは、数値が文字列型(VARCHARなど)として格納されている場合、そのまま比較すると意図しない結果になることがあります。そんなときに便利なのが CAST()関数 です。CAST()を使えば、文字列を数値型に変換してから正確に比較できます。
基本構文
CAST()関数を使って文字列型のカラムを整数値と比較する場合、基本的な構文は以下の通りです。
SELECT * FROM テーブル名 WHERE CAST(カラム名 AS SIGNED) = 比較したい整数値;
「SIGNED」を指定することで、文字列が符号付き整数(INT型相当)に変換され、数値としての比較が可能になります。
実際にテーブルを作って確認してみよう
それでは、実際にサンプルテーブルを作成して動作を確認してみましょう。まずはテーブルを作成します。
mysql> CREATE TABLE compareTwoStringDemo
-> (
-> UserId VARCHAR(100)
-> );
Query OK, 0 rows affected (0.78 sec)次に、INSERT文を使って数値の文字列データをいくつか登録します。
mysql> INSERT INTO compareTwoStringDemo VALUES('1083745');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO compareTwoStringDemo VALUES('9867585');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO compareTwoStringDemo VALUES('3547483');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO compareTwoStringDemo VALUES('9845646');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO compareTwoStringDemo VALUES('9876532');
Query OK, 1 row affected (0.10 sec)SELECT文ですべてのレコードを表示して確認してみます。
mysql> SELECT * FROM compareTwoStringDemo;
実行結果は以下の通りです。
+---------+ | UserId | +---------+ | 1083745 | | 9867585 | | 3547483 | | 9845646 | | 9876532 | +---------+ 5 rows in set (0.00 sec)
CAST()を使って文字列を数値として比較する
それでは、CAST()関数を使って「3547483」という値を数値として比較してみましょう。
mysql> SELECT * FROM compareTwoStringDemo
-> WHERE CAST(UserId AS SIGNED) = 3547483;実行結果は以下の通りです。
+---------+ | UserId | +---------+ | 3547483 | +---------+ 1 row in set (0.00 sec)
このように、CAST()関数で文字列をSIGNED型に変換することで、数値として正確に比較でき、該当するレコードだけを取得できます。
補足:CAST()以外の方法
なお、MySQLではCAST()以外にも以下のような方法で文字列を数値に変換できます。
- CONVERT()関数:
CONVERT(UserId, SIGNED)のように記述でき、CAST()とほぼ同じ動作をします。 - 暗黙の型変換:
WHERE UserId = 3547483のように数値と直接比較すると、MySQLが自動的に型変換を行います。ただし、暗黙の変換はインデックスが使われなくなるなどパフォーマンス面でのデメリットがあるため、明示的にCAST()を使うことが推奨されます。
文字列型のカラムで数値比較を行う場合は、CAST()関数を活用して意図した通りの結果を得ましょう。
-
【MySQL】2つの列の値が等しい場合に該当行を削除する方法
MySQLである列と別の列の値が一致している行だけを削除したいケースは意外と多くあります。例えば、スコアの検算結果などで「2つの値が同じならデータ不要」という場合です。このような処理には DELETE文 を使用します。本記事では、実際にテーブルを作成し、2つの列の値が等しい行を削除する手順をサンプル付きで解説します。1. サンプルテーブルの作成まず、以下のようにテーブルを作成します。mysql> create table DemoTable ( Name varchar(40), Score1 int, Score2 int ); Query OK, 0 rows
-
【MySQL】数字の間にスペースを含む数値データを整形する方法(REPLACE関数の使い方)
データベースでは、「145 78 90」のように数字の間にスペースが挿入された文字列として数値が保存されているケースがあります。電話番号や桁区切りのデータなどがその典型例です。このようなデータを扱いやすくするには、スペースを取り除いて連続した数字に変換すると便利です。本記事では、MySQLのREPLACE()関数を使って、数値文字列内のスペースを一括で削除する方法を解説します。1. サンプルテーブルの作成まず、テーブルを作成します。ここでは数値をvarchar型の文字列として保存します。mysql> create table DemoTable1546 -> ( -