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