SQL 関数一覧 (E‐N) > LENGTH、LENGTHB

文字列の長さ(キャラクタ長、バイト長)を求める

syntax

LENGTH ( string )
LENGTHB ( string )
return [ natural number ]

parameter

string長さを調べる文字列

return

  • 文字列長、または、文字列のバイト長

avail

  • SQL および PL/SQL の両方で使用可能。

LENGTH 関数の内容

文字列 string の文字数を戻す。
文字列 string が CHAR 型(⇔VARCHAR2型)の場合には自動的に補完される後続のスペースも長さとしてカウントされる。

LENGTH、LENGTHB 以外にも各国語向け専用の関数がある。

  • LENGTHC : 完全な Unicode 用
  • LENGTH2 : UCS2 用
  • LENGTH4 : UCS4 用

LENGTHB 関数の内容

文字列 string のバイト数を戻す。
全角文字の場合には使用しているキャラクタセットによりバイト数は異なる。
例えば UTF-8 の場合には全角文字 1 文字が 3 バイトになる。⇒ マルチバイト・キャラクタセット

注意 その1

JA16SJIS などの JA16〜系のキャラクタセットにおけるテーブルの項目定義 CHAR(8)*1 の 'あいう'の LENGTH は 5文字となる。
CHAR(8) 'あいう' の LENGTH の内訳:「あいう」で計 6バイト、余った 2バイトに空白が付け加えられる。あいう 3 文字+ 2 つ空白 = 5 文字)

NULL と長さ 0 の文字列('') の LENGTH は NULLとなる。⇒ NULL の特性

注意 その2

マルチバイト・キャラクタセットの CLOB と NCLOB において LENGTHB は使用できない。(DBMS_LOB.LENGTHB がない)
32Kバイト以下の場合には VARCHAR2 に 暗黙変換 して長さを求めることは可能。
CLOB 型の内部形式LOB 型の格納方式

LENGTH の使用例

JA16SJIS 環境において CHAR(10 byte) と VARCHAR2(10 byte) の LENGTH の違い

SQL> create table rivus.length_sample
  2  (   char10      char(10),
  3      vchar2_10   varchar2(10));
 
SQL> set null '<NULL>'
SQL> select char10, LENGTH(char10), vchar2_10, LENGTH(vchar2_10) from length_sample;
 
CHAR10       LENGTH(CHAR10)  VCHAR2_10    LENGTH(VCHAR2_10)
------------ --------------  ------------ -----------------
あ                        9  あ                           1
あい                      8  あい                         2
abc                      10  abc                          3
<NULL>       <NULL>          <NULL>       <NULL>
あいうえお                5  あいうえお                   5
あx                       9  あx                          2

LENGTHB の使用例

LENGTHB 関数と LENGTH 関数の比較サンプル(JA16SJIS 環境において)

SQL> select vchar2_10, LENGTHB(vchar2_10), length(vchar2_10) from length_sample;
 
VCHAR2_10    LENGTHB(VCHAR2_10) LENGTH(VCHAR2_10)
------------ ------------------ -----------------
あ                            2                 1
あい                          4                 2
abc                           3                 3
<NULL>       <NULL>             <NULL>
あいうえお                   10                 5
あx                           3                 2

豆知識

LENGTH、LENGTHB では長さ0の文字列の長さは計れない。RAW 型のバイト長も正しい結果にならない。

LENGTH0 関数(長さ0 の文字列を長さ0 とする LENGTH)

長さ0 の文字列('') は LENGTH 関数において NULL となる、また、NULL 値 の文字列長も同様に NULL となる。
これは 長さ0 の文字列が NULL 値と区別できない。NULL 値の現在の仕様である。 (Oracle 10g 時点)

CREATE OR REPLACE FUNCTION RIVUS.LENGTH0(P_STR IN VARCHAR2)
RETURN PLS_INTEGER
IS
BEGIN
	RETURN NVL(LENGTH(P_STR),0);
END;
/

RAW 型のバイト列の長さを計る

RAW 型のバイト長を計るには UTL_RAW.LENGTH を使用する。
LENGTHB は RAW データを 文字列型(VARCHAR2)に 暗黙変換 するため、AL32UTF8 の '0' は '30'(← 0x30) になり想定していた2倍の長さになる。

SQL> SELECT UTL_RAW.LENGTH(UTL_I18N.STRING_TO_RAW('ABCDEF', 'AL32UTF8')) UTL_RAW_LEN ,
  2         LENGTHB(UTL_I18N.STRING_TO_RAW('ABCDEF', 'AL32UTF8')) LENB
  3  FROM DUAL
  4  /
 
UTL_RAW_LEN       LENB
----------- ----------
          6         12


SQL 関数 - LENGTH,LENGTHB 関連

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle Web セミナー

*1 Oracle 10g でなら CHAR(8 BYTE)