【MySQL】文字列関数
ここではMySQLで使える文字列関数をまとめて紹介しています。
ASCII関数
ASCII関数を使うことで、文字をASCIIコードに変換することができます。
ASCII(文字)
CHR関数
CHR関数を使うことで、ASCIIコードを文字に変換することができます。
CHR(数値)
CHAR_LENGTH関数
CHAR_LENGTH関数を使うことで、文字列の文字数の長さを求めることが出来ます。
CHAR_LENGTH(文字列)
次のSQLではCOL1列の文字数を確認しています。
mysql> SELECT col1,CHAR_LENGTH(col1) FROM tab1;
+------------+-------------------+
| col1 | CHAR_LENGTH(col1) |
+------------+-------------------+
| 1234567890 | 10 |
+------------+-------------------+
1 row in set (0.00 sec)
MySQLではLENGTH関数という関数もありますが、こちらは指定した文字列のバイト数を取得する関数なので注意してください。
CONCAT関数
CONCAT関数を使うことで、複数の文字列を結合することができます。
CONCAT(文字列1[,文字列2・・・])
次のSQLではa,b,cという文字列を結合した結果’abc’という文字列を返しています。
mysql> SELECT CONCAT('a','b','c');
+---------------------+
| CONCAT('a','b','c') |
+---------------------+
| abc |
+---------------------+
1 row in set (0.00 sec)
INSERT関数
INSERT関数を使うことで、文字列の一部に、任意の文字列を挿入することができます。
INSER(任意の文字列,挿入する位置,置き換えする文字数,置換する文字列)
次のSQLでは、’123456789’という文字列の3文字目から1文字を’abc’に置換した結果として、12abc456789という文字列が返ってきます。
SELECT INSERT('123456789',3,1,'abc');
LEFT関数
LEFT関数を使うことで、文字列の左から任意の文字数の文字列を切り出すことができます。
LEFT(文字列,文字数)
次のSQLでは、’123456789’という文字列の左から3文字を取得し、’123’を返します。
SELECT LEFT('123456789',3);
次のSQLではemp_name列の値を左端から3文字切り出しています。
mysql> SELECT emp_name,LEFT(emp_name,3) FROM tab1;
+----------+------------------+
| emp_name | LEFT(emp_name,3) |
+----------+------------------+
| Suzuki | Suz |
| Tanaka | Tan |
| Kizaki | Kiz |
| Tanaka | Tan |
| Kizaki | Kiz |
| Nakata | Nak |
+----------+------------------+
6 rows in set (0.00 sec)
切り取りする文字数を0や-(マイナス)、NULLが指定されると次のような結果になります。
mysql> SELECT emp_name,LEFT(emp_name,0) FROM tab1;
+----------+------------------+
| emp_name | LEFT(emp_name,0) |
+----------+------------------+
| Suzuki | |
| Tanaka | |
| Kizaki | |
| Tanaka | |
| Kizaki | |
| Nakata | |
+----------+------------------+
6 rows in set (0.00 sec)
mysql> SELECT emp_name,LEFT(emp_name,-3) FROM tab1;
+----------+-------------------+
| emp_name | LEFT(emp_name,-3) |
+----------+-------------------+
| Suzuki | |
| Tanaka | |
| Kizaki | |
| Tanaka | |
| Kizaki | |
| Nakata | |
+----------+-------------------+
6 rows in set (0.00 sec)
mysql> SELECT emp_name,LEFT(emp_name,NULL) FROM tab1;
+----------+---------------------+
| emp_name | LEFT(emp_name,NULL) |
+----------+---------------------+
| Suzuki | NULL |
| Tanaka | NULL |
| Kizaki | NULL |
| Tanaka | NULL |
| Kizaki | NULL |
| Nakata | NULL |
+----------+---------------------+
6 rows in set (0.00 sec)
LENGTH関数
LENGTH関数を使うことで、文字列のバイト数を確認することができます。
LENGTH(文字列)
LENGTH関数を実行した結果は次のようになります。
mysql> SELECT LENGTH('test');
+----------------+
| LENGTH('test') |
+----------------+
| 4 |
+----------------+
1 row in set (0.00 sec)
mysql> SELECT LENGTH('てすと');
+------------------+
| LENGTH('てすと') |
+------------------+
| 6 |
+------------------+
1 row in set (0.00 sec)
mysql> SELECT LENGTH(123);
+-------------+
| LENGTH(123) |
+-------------+
| 3 |
+-------------+
1 row in set (0.00 sec)
指定した値がNULLの場合は、返ってくる値もNULLになります。
mysql> SELECT LENGTH(NULL);
+--------------+
| LENGTH(NULL) |
+--------------+
| NULL |
+--------------+
1 row in set (0.00 sec)
LOCATE関数
LOCATE関数を使うことで、文字列の中の任意の文字の位置を取得することができます。
LOCATE(検索する文字列,文字列,[,検索開始位置])
次のSQLでは、’123456789’という文字列から、’3’という文字列の位置を検索しています。結果は3が返ってきます。
SELECT LOCATE('3','123456789');
LOWER関数
LOWER関数を使うことで、文字列を小文字に変換することができます。
LOWER関数では、小文字に変換したい文字列を指定します。
LOWER(文字列)
LPAD関数
LPAD関数を使うことで、文字列を指定した長さまで、任意の文字列で左から埋めることが出来ます。
文字列1を指定した長さになるまで、文字列2で埋めます。
LPAD(文字列1,長さ,文字列2)
LTRIM関数
LTRIM関数を使うことで、文字列の左から空白(半角スペース)を削除することが出来ます。
LTRIM(文字列1[,文字列2])
OCTET_LENGTH関数
OCTET_LENGTH関数を使うことで、文字列のバイト数を取得することができます。
OCTET_LENGTH(文字列)
POSITION関数
POSITION関数を使うことで、文字列の中の任意の文字の位置を取得することができます。
POSITION(検索文字列 IN 文字列)
次のSQLでは、’123456789’という文字列から、’3’という文字列の位置を検索しています。結果は3が返ってきます。
SELECT POSITION('3' IN '123456789');
REPEAT関数
REPEAT関数を使うことで、文字列を指定した回数繰り返した値を取得することができます。
REPEAT(文字列,繰り返し回数)
次のSQLでは、’123’という文字列を3回繰り返した値’123123123’という文字列が結果として返されます。
SELECT REPEAT('123',3);
RIGHT関数
RIGHT関数を使うことで、文字列の右から任意の文字数の文字列を取得することができます。
RIGHT(文字列,文字数)
次のSQLではemp_name列の値を右端から3文字切り出しています。
mysql> SELECT emp_name,RIGHT(emp_name,3) FROM tab1;
+----------+-------------------+
| emp_name | RIGHT(emp_name,3) |
+----------+-------------------+
| Suzuki | uki |
| Tanaka | aka |
| Kizaki | aki |
| Tanaka | aka |
| Kizaki | aki |
| Nakata | ata |
+----------+-------------------+
6 rows in set (0.00 sec)
切り取りする文字数を0や-(マイナス)、NULLが指定されると次のような結果になります。
mysql> SELECT emp_name,RIGHT(emp_name,0) FROM tab1;
+----------+-------------------+
| emp_name | RIGHT(emp_name,0) |
+----------+-------------------+
| Suzuki | |
| Tanaka | |
| Kizaki | |
| Tanaka | |
| Kizaki | |
| Nakata | |
+----------+-------------------+
6 rows in set (0.00 sec)
mysql> SELECT emp_name,RIGHT(emp_name,-3) FROM tab1;
+----------+--------------------+
| emp_name | RIGHT(emp_name,-3) |
+----------+--------------------+
| Suzuki | |
| Tanaka | |
| Kizaki | |
| Tanaka | |
| Kizaki | |
| Nakata | |
+----------+--------------------+
6 rows in set (0.00 sec)
mysql> SELECT emp_name,RIGHT(emp_name,NULL) FROM tab1;
+----------+----------------------+
| emp_name | RIGHT(emp_name,NULL) |
+----------+----------------------+
| Suzuki | NULL |
| Tanaka | NULL |
| Kizaki | NULL |
| Tanaka | NULL |
| Kizaki | NULL |
| Nakata | NULL |
+----------+----------------------+
6 rows in set (0.00 sec)
QUOTE関数
QUOTE関数を使うことで、任意の文字列を”で囲んだ文字列を結果として返します。
QUOTE(文字列)
次のSQLでは、結果として「cond1 = ’23’」が返されます。
SELECT CONCAT('cond1 = ',QUOTE('23'));
REPLACE関数
REPLACE関数を使うことで、文字列中の文字を別の文字に置換することが出来ます。
REPLACE(文字列,置換前の文字列,置換後の文字列)
REVERSE関数
REVERSE関数を使うことで、文字列を左右に変換した文字列を取得することが出来ます。
REVERSE(文字列)
RIGHT関数
RIGHT関数を使うことで、文字列を右端から切り出しすることができます。
RIGHT(文字列,文字数)
次のSQLでは、’123456789’という文字列の右から3文字を取得し、’789’という文字列を結果として返します。
SELECT RIGHT('123456789',3);
RPAD関数
RPAD関数を使うことで、文字列を指定した長さまで、任意の文字列で右から埋めることが出来ます。
文字列1を指定した長さまで、文字列2で埋めることができます。
RPAD(文字列1,長さ,文字列2)
RTRIM関数
RTRIM関数を使うことで、文字列の右から空白(半角スペース)を削除することが出来ます。
RTRIM(文字列1)
SPACE関数
SPACE関数を使うことで、任意の個数文のスペースを返します。
SPACE(個数)
SUBSTR関数
SUBSTR関数を使うことで、文字列を指定した位置から、任意の文字数を切り取ることが出来ます。
SUBSTR(文字列,切り取り開始位置,文字数)
SUBSTRING関数
SUBSTRING関数を使うことで、文字列を指定した位置から、任意の文字数を切り出しすることが出来ます。
SUBSTRING(文字列,切り取り開始位置,文字数)
次のSQLでは、emp_name列の値を3文字目から2文字切り出しています。
mysql> SELECT emp_name,SUBSTRING(emp_name,3,2) FROM tab1;
+----------+-------------------------+
| emp_name | SUBSTRING(emp_name,3,2) |
+----------+-------------------------+
| Suzuki | zu |
| Tanaka | na |
| Kizaki | za |
| Tanaka | na |
| Kizaki | za |
| Nakata | ka |
+----------+-------------------------+
6 rows in set (0.00 sec)
文字列を切り出す開始位置が、文字列の長さより大きい場合は次のようになります。
mysql> SELECT emp_name,SUBSTRING(emp_name,10,2) FROM tab1;
+----------+--------------------------+
| emp_name | SUBSTRING(emp_name,10,2) |
+----------+--------------------------+
| Suzuki | |
| Tanaka | |
| Kizaki | |
| Tanaka | |
| Kizaki | |
| Nakata | |
+----------+--------------------------+
6 rows in set (0.00 sec)
指定した文字数に0や-(マイナス)、NULLが指定すると次のような結果になります。
mysql> SELECT emp_name,SUBSTRING(emp_name,3,0) FROM tab1;
+----------+-------------------------+
| emp_name | SUBSTRING(emp_name,3,0) |
+----------+-------------------------+
| Suzuki | |
| Tanaka | |
| Kizaki | |
| Tanaka | |
| Kizaki | |
| Nakata | |
+----------+-------------------------+
6 rows in set (0.00 sec)
mysql> SELECT emp_name,SUBSTRING(emp_name,3,-1) FROM tab1;
+----------+--------------------------+
| emp_name | SUBSTRING(emp_name,3,-1) |
+----------+--------------------------+
| Suzuki | |
| Tanaka | |
| Kizaki | |
| Tanaka | |
| Kizaki | |
| Nakata | |
+----------+--------------------------+
6 rows in set (0.00 sec)
mysql> SELECT emp_name,SUBSTRING(emp_name,3,NULL) FROM tab1;
+----------+----------------------------+
| emp_name | SUBSTRING(emp_name,3,NULL) |
+----------+----------------------------+
| Suzuki | NULL |
| Tanaka | NULL |
| Kizaki | NULL |
| Tanaka | NULL |
| Kizaki | NULL |
| Nakata | NULL |
+----------+----------------------------+
6 rows in set (0.00 sec)
TRIM関数
TRIM関数を使うことで、文字列から指定した文字列を削除することができます。
TRIM([文字列2 FROM ] 文字列1)
[文字列2 FROM ]を指定することで、文字列1から文字列2を削除することが出来ます。
[文字列2 FROM ]を指定しない場合は、文字列1から半角スペースが削除されます。
UPPER関数
UPPER関数を使うことで、文字列を大文字に変換することができます。
UPPER関数では、大文字に変換したい文字列を指定します。
UPPER(文字列)