【MySQL 文字列関数】
SUBSTRING関数
substring関数は文字列を指定の位置から指定の文字数を抽出します。
項目
|
内容
|
書式
|
substring(文字列, 開始位置, 文字数)
|
全角、半角関係なく1文字として数えます。
何をいっているのか?というと英語はアルファベットを使います。
一方日本語はひらがなや漢字を使っています。
文章をあらわすのは英語でしたが、日本人も使うのでひらがなや漢字を使えるようになりました。
しかし、アルファベットの大きさでは表現できないため2倍の大きさが必要になったのです。
そのため、次のようなルールができました。
種類
|
全角/半角
|
領域
|
バイト数
|
アルファベット
|
半角
|
1つの領域が必要
|
1バイト
|
ひらがな・漢字
|
半角
|
2つの領域が必要
|
2バイト
|
アルファベットからみるとひらがなや漢字は文字2個分になります。
このことから何バイト?という視点から1文字目なの?2文字目なの?ということが気になりだしたのです。
このため、プログラムをする際に全角半角を対象とした開発をする場合は
全角を1文字とみるのか?2文字分とみるのか?
という意識が仕様によっては必要になります。
数字は「0」を除いた数字に変換された数字を文字列として扱います。
|
「0123」→「123」
|
これを文字列とみなして、開始位置から指定した文字数を取得しています。
|
「substring('あiうeo', 3, 2)」
|
あ
|
2バイト
|
i
|
1バイト
|
う
|
2バイト
|
e
|
2バイト
|
o
|
1バイト
|
|
substring関数の開始位置は「3」です。
バイト数であれば「i」は3バイト目なので開始位置となるはずです。
しかし、結果からみると「う」から始まっています。
したがって、substring関数はバイト数ではなく文字数で判定していることが分かります。
今度は取得する文字数を見てみます。
「う」は2バイトです。
もしもバイト数であれば「う」のみを取得すればいいのですが、
結果は「うe」となっています。
すなわち、バイト数で取得しているのではなく、文字数で判定していることが分かります。
空文字から取得しようとしても空文字が返ります。
「NULL」から取得しようとしても「NULL」が返ります。
開始位置をマイナスとしたときは右側からみます。
取得文字数をマイナスにしても取得することはできません。
|
|
著作権情報 | 本ホームページに掲載されている情報等については、いかなる保証もいたしません。 本ホームページを通じて入手したいかなる情報も複製、販売、出版または使用させたり、 または公開したりすることはできません。 当方は、本ホームページを利用したいかなる理由によっての障害等が発生しても、 その結果本ホームページを利用された本人または他の第三者が被った損害について 一切の責任を負わないものとします。 |
|