Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$LENGTH

文字列内の文字数、または文字列内の区切られた部分文字列数を返す文字列関数です。

Synopsis

$LENGTH(expression[,delimiter])

引数

expression ターゲット文字列。数値、文字列リテラル、変数名、または任意の有効な式を指定できます。
delimiter オプション — ターゲット文字列にある部分文字列の境界を示す文字列。文字列リテラルを使用する必要がありますが、長さは自由です。また、引用符で囲む必要があります。

概要

$LENGTH は使用される引数に応じて、指定した文字列にある文字数あるいは指定した文字列にある部分文字列数を返します。

  • $LENGTH(expression) は、文字列の文字数を返します。expression が空文字列 ('') の場合、$LENGTH は 0 を返します。expression が NULL の場合、$LENGTH は 0 を返します。

  • $LENGTH(expression,delimiter) は、文字列内の部分文字列数を返します。$LENGTH は、指定された delimiter で相互に分離されている部分文字列数を返します。この数は常に expression 文字列内で見つかった区切り文字インスタンスの数に 1 を加えたものです。

この関数は、データ型 SMALLINT を返します。

$LENGTH(expression) と他の Length 関数

$LENGTH(expression) と他の length 関数 (LENGTHCHARACTER_LENGTHCHAR_LENGTH、および DATALENGTH) はすべて以下の処理を実行します。

  • $LENGTH は、SelectMode の設定に関係なく、表示値ではなく、フィールドの論理 (内部データ・ストレージ) 値の長さを返します。すべての SQL 関数は常に、フィールドの内部ストレージ値を使用します。

  • $LENGTH は、数値のキャノニック形式の長さを返します。キャノニック形式の数値では、先頭と末尾にあるゼロ、先頭の符号 (1 つのマイナス記号を除く)、末尾の小数点記号文字が取り除かれます。$LENGTH は、数値文字列の文字列長を返します。数値文字列はキャノニック形式に変換されません。

  • $LENGTH 関数では、文字列から先頭の空白は取り除かれません。LTRIM 関数を使用して、文字列から先頭の空白を削除できます。

以下の処理を実行する場合、$LENGTH は他の length 関数 (LENGTHCHARACTER_LENGTHCHAR_LENGTH、および DATALENGTH) と異なります。

  • $LENGTH 関数では、末尾の空白や終了文字は取り除かれません。

    CHARACTER_LENGTH 関数、CHAR_LENGTH 関数、および DATALENGTH 関数でも、末尾の空白や終了文字は取り除かれません。LENGTH では、末尾の空白や文字列の終了文字は取り除かれます。

  • $LENGTH は NULL 値を渡すと 0、空文字列を渡すと 0 を返します。

    LENGTHCHARACTER_LENGTHCHAR_LENGTH、および DATALENGTH は、NULL 値を渡すと NULL、空文字列を渡すと 0 を返します。

  • $LENGTH はデータ・ストリーム・フィールドをサポートしません。string-expression にストリーム・フィールドを指定すると、SQLCODE -37 が返されます。

    また、LENGTH ではストリーム・フィールドもサポートされません。CHARACTER_LENGTH 関数、CHAR_LENGTH 関数、および DATALENGTH 関数では、データ・ストリーム・フィールドはサポートされません。

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

メモ

$LENGTH、$PIECE、および $LIST

  • 引数が 1 つの $LENGTH は、文字列の文字数を返します。この関数は、位置を基準に部分文字列を特定し、その部分文字列値を返す $EXTRACT 関数と共に使用できます。

  • 引数が 2 つの $LENGTH は、区切り文字列に基づいて、文字列の部分文字列数を返します。この関数は、区切り文字を基準に部分文字列を特定し、その部分文字列値を返す $PIECE 関数と共に使用できます。

  • $LENGTH は、$LISTBUILD または $LIST を使用して作成された、エンコードされたリストには使用できません。エンコードされたリスト文字列の部分文字列 (リスト要素) 数を調べるには、$LISTLENGTH を使用します。

$LENGTH$FIND$EXTRACT、および $PIECE 関数は、標準文字の文字列に対して処理を実行します。さまざまな $LIST 関数は、エンコードされた文字列を操作します。この文字列は、標準の文字列とは互換性がありません。唯一の例外は、$LISTGET 関数と、引数が 1 つおよび 2 つの形式の $LIST 関数です。これらの関数は、入力としてエンコードされた文字の文字列を受け取り、単一要素値を標準文字の文字列として出力します。

関連項目

FeedbackOpens in a new tab