概要
$LENGTH は使用される引数に応じて、指定した文字列にある文字数あるいは指定した文字列にある部分文字列数を返します。
-
$LENGTH(expression) は、文字列の文字数を返します。expression が空文字列 ('') の場合、$LENGTH は 0 を返します。expression が NULL の場合、$LENGTH は 0 を返します。
-
$LENGTH(expression,delimiter) は、文字列内の部分文字列数を返します。$LENGTH は、指定された delimiter で相互に分離されている部分文字列数を返します。この数は常に expression 文字列内で見つかった区切り文字インスタンスの数に 1 を加えたものです。
$LENGTH(expression) と他の Length 関数
$LENGTH(expression) と他の length 関数 (LENGTH、CHARACTER_LENGTH、CHAR_LENGTH、および DATALENGTH) はすべて以下の処理を実行します。
-
$LENGTH は、SelectMode の設定に関係なく、表示値ではなく、フィールドの論理 (内部データ・ストレージ) 値の長さを返します。すべての SQL 関数は常に、フィールドの内部ストレージ値を使用します。
-
$LENGTH は、数値のキャノニック形式の長さを返します。キャノニック形式の数値では、先頭と末尾にあるゼロ、先頭の符号 (1 つのマイナス記号を除く)、末尾の小数点記号文字が取り除かれます。$LENGTH は、数値文字列の文字列長を返します。数値文字列はキャノニック形式に変換されません。
-
$LENGTH 関数では、文字列から先頭の空白は取り除かれません。LTRIM 関数を使用して、文字列から先頭の空白を削除できます。
以下の処理を実行する場合、$LENGTH は他の length 関数 (LENGTH、CHARACTER_LENGTH、CHAR_LENGTH、および DATALENGTH) と異なります。
-
$LENGTH 関数では、末尾の空白や終了文字は取り除かれません。
CHARACTER_LENGTH 関数、CHAR_LENGTH 関数、および DATALENGTH 関数でも、末尾の空白や終了文字は取り除かれません。LENGTH では、末尾の空白や文字列の終了文字は取り除かれます。
-
$LENGTH は NULL 値を渡すと 0、空文字列を渡すと 0 を返します。
LENGTH、CHARACTER_LENGTH、CHAR_LENGTH、および DATALENGTH は、NULL 値を渡すと NULL、空文字列を渡すと 0 を返します。
-
$LENGTH はデータ・ストリーム・フィールドをサポートしません。string-expression にストリーム・フィールドを指定すると、SQLCODE -37 が返されます。
また、LENGTH ではストリーム・フィールドもサポートされません。CHARACTER_LENGTH 関数、CHAR_LENGTH 関数、および DATALENGTH 関数では、データ・ストリーム・フィールドはサポートされません。
-
$LENGTH は、データ型 SMALLINT を返します。他の length 関数はすべて、データ型 INTEGER を返します。
NULL および空文字列引数
$LENGTH(expression) では、空文字列 ('') と NULL (値が存在しない) は区別されません。これは、空文字列 ('') と NULL のどちらの場合にも 0 の長さを返します。
NULL 以外の区切り文字を指定した $LENGTH(expression,delimiter) は、一致がない場合は、区切り部分文字列カウント 1 を返します。完全な文字列は、区切り文字を含まない単一の部分文字列です。これは、expression が空文字列 ('') である場合や、expression が NULL である場合も同じです。ただし、空文字列自体は一致し、値 2 を返します。
以下のテーブルでは、文字列 ('abc')、空文字列 ('')、または NULL の expression 値とノンマッチ文字列 ('^')、空文字列 ('')、または NULL の delimiter 値のペアの可能な組み合わせを示します。
$LENGTH(NULL) = 0 |
$LENGTH('') = 0 |
$LENGTH('abc') = 3 |
$LENGTH(NULL,NULL) = 0 |
$LENGTH('',NULL) = 0 |
$LENGTH(’abc‘,NULL) = 0 |
$LENGTH(NULL,'') = 1 |
$LENGTH('','') = 2 |
$LENGTH(’abc‘,'') = 1 |
$LENGTH(NULL,'^') = 1 |
$LENGTH(’‘,'^') = 1 |
$LENGTH('abc','^') = 1 |
例
以下の例は、文字列の長さ 6 を返します。
SELECT $LENGTH('ABCDEG') AS StringLength
以下の例は、ドル記号 ($) で区切られた文字列内の部分文字列数 3 を返します。
SELECT $LENGTH('ABC$DEF$EFG','$') AS SubStrings
指定された区切り文字が文字列内に見つからない場合は、文字列全体が 1 つの部分文字列となるため、$LENGTH は 1 を返します。
SELECT $LENGTH('ABCDEG','$') AS SubStrings
以下の埋め込み SQL の例では、最初の $LENGTH 関数は、a の文字数である 11 を返します (スペース文字もカウントされます)。2 番目の $LENGTH 関数は、部分文字列の区切り文字に b のスペース文字を使用し、a の部分文字列数である 2 を返します。
SET a="HELLO WORLD"
SET b=" "
&sql(SELECT
$LENGTH(:a),
$LENGTH(:a,:b)
INTO :a1,:a2 )
IF SQLCODE'=0 {
WRITE !,"Error code ",SQLCODE }
ELSE {
WRITE !,"The input string: ",a
WRITE !,"Number of characters: ",a1
WRITE !,"Number of substrings: ",a2 }
以下の例は、テストされた文字列が NULL 文字列なので 0 を返します。
SELECT $LENGTH(NULL) AS StringLength
以下の例は、指定された区切り文字が見つからないので 1 を返します。この場合は、部分文字列が 1 つ (NULL 文字列) あることになります。
SELECT $LENGTH(NULL,'$') AS SubStrings
以下の例は、区切り文字列が NULL 文字列なので 0 を返します。
SELECT $LENGTH('ABCDEFG',NULL) AS SubStrings