MySQLでEMP1、EMP2などの列の値から文字列を削除して数字だけを抽出するクエリの書き方
MySQLでは、EMP1、EMP2、EMP3 のような値から「EMP」という文字列部分を取り除き、数字だけを抽出したいケースがよくあります。このような場合、RIGHT() 関数と LENGTH() 関数を組み合わせることで簡単に実現できます。
RIGHT(文字列, n) は右端から n 文字を返し、LENGTH(文字列) は文字列の長さを返します。つまり RIGHT(列名, LENGTH(列名) - 3) とすることで、先頭の3文字(EMP)を除いた残りの部分を取得できます。
1. サンプルテーブルを作成する
まず、従業員コードを格納するテーブルを作成します。
mysql> create table DemoTable1540
-> (
-> EmployeeCode varchar(20)
-> );
Query OK, 0 rows affected (0.39 sec)2. テストデータを挿入する
INSERT文を使って、いくつかのレコードを登録します。
mysql> insert into DemoTable1540 values('EMP9');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1540 values('EMP4');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1540 values('EMP8');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable1540 values('EMP6');
Query OK, 1 row affected (0.12 sec)3. 登録したレコードを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1540;
実行結果は以下の通りです。
+--------------+ | EmployeeCode | +--------------+ | EMP9 | | EMP4 | | EMP8 | | EMP6 | +--------------+ 4 rows in set (0.00 sec)
4. 文字列を削除して数字だけを抽出するクエリ
ここで本題のクエリです。RIGHT() と LENGTH() を組み合わせて、先頭の「EMP」を除去します。
mysql> select right(EmployeeCode,length(EmployeeCode)-3) as onlyDigit from DemoTable1540;
実行すると、次のように数字部分だけが抽出されます。
+-----------+ | onlyDigit | +-----------+ | 9 | | 4 | | 8 | | 6 | +-----------+ 4 rows in set (0.00 sec)
補足:別の方法
先頭の固定文字列を削除する場合は、SUBSTRING(EmployeeCode, 4) のように SUBSTRING() 関数を使っても同じ結果が得られます。また、接頭辞が可変長の場合は REPLACE(EmployeeCode, 'EMP', '') を使う方法も有効です。用途に応じて使い分けるとよいでしょう。
-
MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法
はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実
-
MySQLでVARCHAR文字列からハイフン以降の数値を削除する方法(SUBSTRING_INDEX活用)
MySQLで「John-232」のようなハイフンを含むVARCHAR型の文字列から、ハイフン以降の数値部分を削除したい場合があります。このような処理には、SUBSTRING_INDEX() 関数を使用すると簡単に実現できます。SUBSTRING_INDEX()関数とはSUBSTRING_INDEX(文字列, 区切り文字, 出現回数) は、指定した区切り文字が現れる位置より前の部分文字列を返す関数です。第3引数に「1」を指定すると、区切り文字が最初に出現する位置より前の文字列だけが取得されます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create t