2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQL常用文字列操作関数

Last updated at Posted at 2017-02-08

以下、動作環境はWindows版MySQL Community Server 5.7.16です。

#文字列の長さ

lengthとoctet_lengthとchar_lengthがあります。octet_lengthはlengthと同じです。
__lengthはバイト単位の長さ、__char_lengthは字数単位の長さです。文字列中にマルチバイト文字が含まれていると、結果に差が現れます。length(NULL)やchar_length(NULL)はNULLです。

select length('1234567890');
10

select char_length('1234567890');
10

select length('1234567890');
30

select char_length('1234567890');
10

select length(null);
NULL

select char_length(null);
NULL

#部分文字列(左端・右端)

left(str, len)で、文字列strの左端len文字を切り取ります。バイト数ではなく字数です。len>length(str)の場合は、文字列全体を返します。len<0の場合は、空白文字列''を返します。str, lenのどちらかがNULLなら、戻り値もNULLです。right(str, len)は右端を切り取ります。

select left('1234567890', 5);
12345

select left('1234567890', 5);
12345

select left('1234567890', 1);
1

select left('1234567890', 0);


select left('1234567890', -1);


select left('1234567890', 11);
1234567890


select left(null, 1);
NULL

select left('1234567890', null);
NULL

select right('1234567890', 5);
67890

select right('1234567890', 5);
67890

select right('1234567890', 1);
0

select right('1234567890', 0);


select right('1234567890', -1);


select right('1234567890', 11);
1234567890

select right(null, 1);
NULL

select right('1234567890', null);
NULL

#部分文字列(中間)

midとsubstrとsubstringがありますが、意味は全部同じです。
mid(str, pos, len)は、文字列strの位置posから始まる長さlenの文字列を返します。posは0ではなく1から始まります。最左端位置が1です。pos, lenはバイト数ではなく字数です。lenは省略することもでき、その場合は最右端までとなります。

select mid('1234567890', 2, 1);
2

select mid('1234567890', 2);
234567890

select mid('1234567890', 2, 1);
2

#文字列内検索

instrとlocationとpositionがあります。instrとlocationは引数の並びが逆なので注意して下さい。positionはlocationと同じです。
instr(str, substr)で、str内で最初にsubstrが現れる位置を返します。位置は0でなく1から始まります。最左端位置が1です。substrが見つからない場合は0が返ります。検索は大文字小文字を区別しません。全角文字も、全角文字同士なら大文字と小文字を区別しません。つまりは同じ文字とみなされるということです。ただし、全角と半角は区別します。つまりAは別の文字です。

select instr('ABCDEFGHIJ', 'b');
2

select instr('ABCDEFGHIJ', 'z');
0

select instr('ABCDEFGHIJ', 'A');
0

select instr('ABCDEFGHIJ', 'a');
1

select instr('あいうえおかきくけこ', 'イ');
0

#置換

replace(str, from_str, to_str)で、str中に現れる部分文字列from_strを全部to_strに置き換えます。このとき、大文字と小文字を__区別します。__また、半角文字と全角文字も区別します。

select replace('ABCDEFGHIJ', 'A', '*');
*BCDEFGHIJ

select replace('ABCDEFGHIJ', 'a', '*');
ABCDEFGHIJ

select replace('ABCDEFGHIJ', 'A', '*');
ABCDEFGHIJ

#Q&A
Q. 文字列str内で部分文字列substrが「最後」に現れる位置を返す関数はないのか。
A. ないみたいです。MS AccessにはInStrRevってのがありますが、MySQLにはありません。

以上!このぐらい頭に入っていれば取りあえず恰好はつくかな。

#参考文献

MySQL 5.6 リファレンスマニュアル/関数と演算子/文字列関数
https://dev.mysql.com/doc/refman/5.6/ja/string-functions.html

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?