Oracleで文字列の文字数やバイト数を取得する方法です。
特に難しいことはなく、Bがついていればバイト数を取得すると覚えれば簡単です。では、それぞれの使い方を紹介します。
LENGTHを使って文字列の文字数を取得
まずはLENGTHを使用して文字列の文字数を取得する構文です。
SELECT LENGTH('文字列') FROM DUAL;
構文自体はとても簡単です。試しに実行してみましょう。「今日もいい天気」という文字列の文字数を取得してみます。文字数は7なので「7」が返って来たらOKです。
結果は「7」が返って来ましたね。
SELECT句だけでなく、WHERE句でも使うことが出来ます。山手線の駅名で3文字以上の駅の一覧を取得したい場合は、こんな感じに書いてみます。山手線テーブルは独自に作成しました。
SELECT STATION_NAME FROM TAB_YAMANOTE_STATION WHERE LENGTH(STATION_NAME) >= 3;
WHERE句の条件に「LENGTH(STATION_NAME) >= 3」と書けば、STATION_NAMEカラムから3文字以上に条件を絞ってくれます。で、結果を見てみます。
ちゃんと3文字以上の駅の駅名を取得できましたね。
LENGTHBを使って文字列のバイト数を取得
次にLENGTHBを使用して文字列のバイト数を取得する構文です。
SELECT LENGTHB('文字列') FROM DUAL;
使い方はLENGTHと同じです。先ほどと同じように、「今日もいい天気」という文字列に対して、今度はバイト数を取得してみます。
Oracle APEXのDatabase Characterset(データベースキャラクターセット)はUTF-8のため、日本語は1文字が3バイトになっています。よって、バイト数21が正解です。ちゃんと取得できてます。
DBによってデータベースキャラクターセットが異なり、日本の現場業務で設定されているデータベースキャラクターセットはShift_JISがメジャーと思います。なので、人によっては、上のSQL文を実行した時の結果が「14」になる人もいます。
LENGTHBもWHERE句で使用してみます。山手線の駅名で、10バイト以上の駅を取得してみます。
SELECT STATION_NAME FROM TAB_YAMANOTE_STATION WHERE LENGTHB(STATION_NAME) >= 10;
WHERE句に「LENGTHB(STATION_NAME) >= 10」と条件を指定しているので、STATION_NAMEカラムの値が10バイト以上の駅名を取得してくれます。
取得できましたね。
※データベースキャラクターセットがShift_JISの人は高輪ゲートウェイだけ取得するはずです。
参考サイト
.