文字数を調べるには LENGTH、バイト数を調べるには LENGTHB 関数を使用します。
LENGTH と LENGTHB 関数の使い方
文字数 = LENGTH('文字列')
バイト数 = LENGTHB('文字列')
LENGTH と LENGTHB の結果比較
文字種 | サンプル | LENGTH | LENGTHB |
---|---|---|---|
半角文字 | LENGTH('1234567890') | 10 | 10 |
全角文字 | LENGTH('1234567890') | 10 | 20 |
空文字列 | LENGTH('') | NULL | NULL |
末尾に半角スペース | LENGTH('1234567890 ') | 11 | 11 |
半角スペースのみ | LENGTH(' ') | 1 | 1 |
NULL | LENGTH(NULL) | NULL | NULL |
サロゲートペア | LENGTH('𠀋') | 2 | 4 |
注意
-
空文字列はNULLが返されます。
--空文字列 -> 結果 NULL SELECT LENGTH('') FROM DUAL; SELECT LENGTHB('') FROM DUAL;
対策
--NVLでNULLをゼロにする -> 結果 0 SELECT NVL(LENGTH(''), 0) FROM DUAL; SELECT NVL(LENGTHB(''), 0) FROM DUAL;
- LENGTHでは、サロゲートペア文字は 2 文字として扱われます。
- LENGTHBでは、サロゲートペア文字は 4 Byte として扱われます。
実行例(LENGTH)
--半角文字 -> 結果 10
SELECT LENGTH('1234567890') FROM DUAL;
--全角文字 -> 結果 10
SELECT LENGTH('1234567890') FROM DUAL;
--空文字列 -> 結果 NULL
SELECT LENGTH('') FROM DUAL;
--空文字列 の 結果を ゼロに
SELECT NVL(LENGTH(''), 0) FROM DUAL;
--末尾に半角スペース -> 結果 20
SELECT LENGTH('1234567890 ') FROM DUAL;
--半角スペースのみ -> 結果 10
SELECT LENGTH(' ') FROM DUAL;
--NULL -> 結果 NULL
SELECT LENGTH(NULL) FROM DUAL;
--NULL の 結果を ゼロに
SELECT NVL(LENGTH(NULL), 0) FROM DUAL;
--サロゲートペア -> 結果 2
SELECT LENGTH('𠀋') FROM DUAL;
実行例(LENGTHB)
--半角文字 -> 結果 10
SELECT LENGTHB('1234567890') FROM DUAL;
--全角文字 -> 結果 20
SELECT LENGTHB('1234567890') FROM DUAL;
--空文字列 -> 結果 NULL
SELECT LENGTHB('') FROM DUAL;
--空文字列 の 結果を ゼロに
SELECT NVL(LENGTHB(''), 0) FROM DUAL;
--末尾に半角スペース -> 結果 20
SELECT LENGTHB('1234567890 ') FROM DUAL;
--半角スペースのみ -> 結果 10
SELECT LENGTHB(' ') FROM DUAL;
--NULL -> 結果 NULL
SELECT LENGTHB(NULL) FROM DUAL;
--NULL の 結果を ゼロに
SELECT NVL(LENGTHB(NULL), 0) FROM DUAL;
--サロゲートペア -> 結果 4
SELECT LENGTHB('𠀋') FROM DUAL;
類似記事
検証環境
- Oracle Database 12c Release 12.1.0.1.0 - 64bit Production