【MySQL 文字列関数】
INSTR関数
instr関数は対象の文字列の中に文字が入っているのか?
入っていれば何番目に入っているのか?を探す関数です。
検索したい文字列が入っていなければ「0」を返します。
何文字目か?は半角や全角関係なく数えます。
全角半角関係なく、1文字を1として数えています。
何をいっているのか?というと英語はアルファベットを使います。
一方日本語はひらがなや漢字を使っています。
文章をあらわすのは英語でしたが、日本人も使うのでひらがなや漢字を使えるようになりました。
しかし、アルファベットの大きさでは表現できないため2倍の大きさが必要になったのです。
そのため、次のようなルールができました。
種類
|
全角/半角
|
領域
|
バイト数
|
アルファベット
|
半角
|
1つの領域が必要
|
1バイト
|
ひらがな・漢字
|
半角
|
2つの領域が必要
|
2バイト
|
アルファベットからみるとひらがなや漢字は文字2個分になります。
このことから何バイト?という視点から1文字目なの?2文字目なの?ということが気になりだしたのです。
このため、プログラムをする際に全角半角を対象とした開発をする場合は
全角を1文字とみるのか?2文字分とみるのか?
という意識が仕様によっては必要になります。
select "instr('12345', '1')" as "SQL", instr('12345', '1') as 結果 from dual
数字の文字列を使った検索例です。
「1」は最初なので返ってくる戻り値も「1」です。
|
select "instr('12345', 2)" as "SQL", instr('12345', 2) as 結果 from dual
数字の文字列から数字で検索した例です。数字で検索しても2番目という「2」が返ります。
|
select "instr('abcde', 'a')" as "SQL", instr('abcde', 'a') as 結果 from dual
アルファベットを使った検索例です。
「a」は1番目なので返ってくる戻り値も「1」です。
|
select "instr('12345', '5')" as "SQL", instr('12345', '5') as 結果 from dual
数字の文字列から「5」を探した検索例です。
5番目に見つかるので戻り値は「5」となります。
|
select "instr('abcde', 'e')" as "SQL", instr('abcde', 'e') as 結果 from dual
アルファベットから「e」という文字列を探した検索例です。
5番目に見つかるので戻り値は「5」となります。
|
select "instr('あいうえお', 'あ')" as "SQL",
instr('あいうえお', 'あ') as 結果 from dual
全角のひらがなから「あ」を探した検索例です。
1番目に見つかるので戻り値は「1」となります。
|
select "instr('あいうえお', 'お')" as "SQL",
instr('あいうえお', 'お') as 結果 from dual
全角のひらがなから「お」を探した検索例です。
5番目に見つかるので戻り値は「5」となります。
|
select "instr('あaいiうuえeおo', 'い')" as "SQL",
instr('あaいiうuえeおo', 'い') as 結果 from dual
ひらがな(全角)とアルファベット(半角)が混在した例です。
「い」を探すと戻り値は「3」と返ります。
これは全角半角関係なく、文字を1文字とみなしていることがわかります。
|
select "instr('abc3.me','3')" as "SQL", instr('abc3.me','3') as 結果 from dual
アルファベットと数字と記号の混在から検索した例です。
数字の「3」を探した結果が「4」となります。
ちなみに検索しても図のようなケースは一致しないため戻り値が「0」となります。
instr('アイウエオ', 'ア')
|
全角のカタカナと半角のカタカナを比較したケース
|
instr('12345', '1')
|
全角の数字と半角の数字を比較したケース
|
instr('アイウエオ', 'あ')
|
カタカナの「ア」とひらがなの「あ」を比較したケース
|
instr('あいうえお', 'ア')
|
ひらがなの「あ」とカタカナの「ア」を比較したケース
|
instr('あいうえお', 'ア')
|
ひらがなの「あ」と半角の「ア」を比較したケース
|
instr('あいうえお', 'a')
|
ひらがなの「あ」とアルファベットの「a」を比較したケース
|
|
|
著作権情報 | 本ホームページに掲載されている情報等については、いかなる保証もいたしません。 本ホームページを通じて入手したいかなる情報も複製、販売、出版または使用させたり、 または公開したりすることはできません。 当方は、本ホームページを利用したいかなる理由によっての障害等が発生しても、 その結果本ホームページを利用された本人または他の第三者が被った損害について 一切の責任を負わないものとします。 |
|