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(string-expression)

{fn LENGTH(string-expression)}

引数

string-expression 列の名前、文字列リテラル、他のスカラ関数の結果などを表すことができる文字列式。基本となるデータ型は、任意の文字タイプ (CHAR や VARCHAR など) とすることができます。

概要

LENGTH は、与えられた文字列式について、そのバイト数ではなく、文字数を示す整数を返します。string-expression には、文字列 (末尾の空白は削除される)、または数値 (Caché によってキャノニック形式に変換される) を指定できます。

LENGTH は、{ } 括弧構文による ODBC スカラ関数、または SQL 汎用関数として使用できる点に注意してください。

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

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

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

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

  • LENGTH は、データ型 INTEGER (%Library.Integer) の値を返します。

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

  • LENGTH には、末尾の空白や文字列の終了文字は含まれません。

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

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

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

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

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

以下の例では、Caché は最初に各数値をキャノニック形式に変換します (先頭および末尾のゼロを削除し、先頭の符号を解決し、末尾の小数点区切り文字を削除します)。以下の各 LENGTH は、長さ 1 を返します。

SELECT {fn LENGTH(7.00)} AS CharCount,
       {fn LENGTH(+007)} AS CharCount,
       {fn LENGTH(007.)} AS CharCount,
       {fn LENGTH(00000.00)} AS CharCount,
       {fn LENGTH(-0)} AS CharCount

以下の例では、1 つ目の LENGTH は先頭のゼロを削除し、長さの値として 2 を返します。2 つ目の LENGTH は数値を文字列として扱い、先頭のゼロは削除せず、長さの値として 3 を返します。

SELECT LENGTH(0.7) AS CharCount,
       LENGTH('0.7') AS CharCount

以下の例は、値 12 を返します。

SELECT LENGTH('INTERSYSTEMS') AS CharCount

以下の例では、LENGTH がどのように先頭および末尾の空白を扱うかを示します。1つ目の LENGTH は、末尾の空白は取り除くが先頭の空白は取り除かないため、15 を返します。2 つ目の LENGTH は、LTRIM が先頭の空白を取り除くため、12 を返します。

SELECT LENGTH('   INTERSYSTEMS      ') AS CharCount,
       LENGTH(LTRIM('   INTERSYSTEMS      ')) AS CharCount

以下の例は、Sample.Person テーブル内の各 Name 値の文字数を返します。

SELECT Name,{fn LENGTH(Name)} AS CharCount
FROM Sample.Person
ORDER BY CharCount

以下の例は、DOB (誕生日) フィールド内の文字数を返します。(LENGTH、CHAR_LENGTH、CHARACTER_LENGTH によって) 返される長さは、日付の内部 ($HOROLOG) 形式であり、表示形式ではありません。DOB の表示長は、10 文字です。3 つの長さ関数は、すべて内部長 5 を返します。

SELECT DOB,{fn LENGTH(DOB)} AS LenCount,
CHAR_LENGTH(DOB) AS CCount,
CHARACTER_LENGTH(DOB) AS CtrCount
FROM Sample.Person

以下の埋め込み SQL の例は、Unicode 文字の文字列の長さを返します。返される長さは、文字数 (7) であり、バイト数ではありません。

  IF $SYSTEM.Version.IsUnicode() {
    SET a=$CHAR(920,913,923,913,931,931,913)
    &sql(SELECT LENGTH(:a) INTO :b )
    IF SQLCODE'=0 {
       WRITE !,"Error code ",SQLCODE }
    ELSE {
       WRITE !,"The Greek Sea: ",a,!,$LENGTH(a),!,b }
  }
  ELSE {WRITE "This example requires a Unicode installation of Caché"}

(上の例は、Caché の Unicode インストールが必要です。)

関連項目

FeedbackOpens in a new tab