Web
Analytics

社畜ゲートウェイ

京成・京急を中心に取り上げる阪急ファンのブログです。日本一遅い速報を届けます。

MENU

【スポンサーリンク】

【Oracle】文字列の文字数・バイト数を取得するLENGTH・LENGTHB

【スポンサーリンク】

Oracleで文字列の文字数やバイト数を取得する方法です。

LENGTHとLENGTHBの違い

文字列の文字数やバイト数を取得する方法はLENGTH関数・LENGTHB関数を使用します。どっちがどっち?と迷ったりする忘れたりする人も多いので、先に簡単にまとめておきます。

  • LENGTH:文字数
  • LENGTHB:バイト数

特に難しいことはなく、Bがついていればバイト数を取得すると覚えれば簡単です。では、それぞれの使い方を紹介します。

 

LENGTHを使って文字列の文字数を取得

まずはLENGTHを使用して文字列の文字数を取得する構文です。

SELECT LENGTH('文字列') FROM DUAL;

構文自体はとても簡単です。試しに実行してみましょう。「今日もいい天気」という文字列の文字数を取得してみます。文字数は7なので「7」が返って来たらOKです。

f:id:neko_britannia:20201001205402j:plain

結果は「7」が返って来ましたね。

 

SELECT句だけでなく、WHERE句でも使うことが出来ます。山手線の駅名で3文字以上の駅の一覧を取得したい場合は、こんな感じに書いてみます。山手線テーブルは独自に作成しました。

SELECT STATION_NAME
  FROM TAB_YAMANOTE_STATION
 WHERE LENGTH(STATION_NAME) >= 3;

WHERE句の条件に「LENGTH(STATION_NAME) >= 3」と書けば、STATION_NAMEカラムから3文字以上に条件を絞ってくれます。で、結果を見てみます。

f:id:neko_britannia:20201001210030j:plain

ちゃんと3文字以上の駅の駅名を取得できましたね。

 

LENGTHBを使って文字列のバイト数を取得

次にLENGTHBを使用して文字列のバイト数を取得する構文です。

SELECT LENGTHB('文字列') FROM DUAL;

使い方はLENGTHと同じです。先ほどと同じように、「今日もいい天気」という文字列に対して、今度はバイト数を取得してみます。

f:id:neko_britannia:20201001210446j:plain

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バイト以上の駅名を取得してくれます。

f:id:neko_britannia:20201001211431j:plain

取得できましたね。

※データベースキャラクターセットがShift_JISの人は高輪ゲートウェイだけ取得するはずです。

 

参考サイト

docs.oracle.com