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?

%SQLSTRING

値を文字列としてソートする照合関数です。

Synopsis

%SQLSTRING(expression[,maxlen])

%SQLSTRING expression

引数

expression 列名、文字リテラル、または他の関数の結果となる文字列式。基本となるデータ型は、任意の文字タイプ (CHAR や VARCHAR2 など) とすることができます。expression にはサブクエリを指定できます。
maxlen オプション — 照合された値が、maxlen の値にまで切り捨てられることを指定する正の整数。maxlen には、追加されている先頭の空白が含まれることに注意してください。((maxlen)) のように二重括弧で maxlen を囲むと、リテラル置換を抑制できます。

概要

%SQLSTRING は、expression を (大文字と小文字を区別する) 文字列としてソートされる形式に変換します。%SQLSTRING は、後続の空白 (スペースやタブなど) を削除し、文字列の最初の部分に空白を 1 つ追加します。この追加された空白は、NULL と数値を強制的に文字列として照合します。先頭と末尾のゼロは数値から削除されます。

%SQLSTRING がすべての値に空白を追加するため、NULL 値を文字列長 1 を持つ空白として照合します。%SQLSTRING は空白 (スペース、タブなど) だけを含む値を SQL 空文字列 (") として照合します。%SQLSTRING が空文字列 (長さがゼロ) に空白を追加すると、空文字列 $CHAR(0) の内部表現が追加された空白として照合し、文字列長 2 という結果になります。

オプションの maxlen 引数は、インデックス指定や照合の際に expression 文字列を、指定された文字数に切り捨てます。例えば、maxlen トランケーションを持つ長い文字列を挿入する場合、完全な文字列が挿入され、SELECT 文で検索できます。この文字列に対するインデックス・グローバルは、指定された長さに切り捨てられます。これは、ORDER BY と比較演算は、切り捨てられたインデックス文字列のみを評価することを意味します。このようなトランケーションは、Caché 添え字で 255 文字制限を超える文字列に対してインデックスを指定するときに特に便利です。Caché 以外のシステムから変換する際、VARCHAR(255) のインデックスを付け、次にデータをテーブルに挿入しようとして、問題が生じることがありました。maxlen 引数では、長いフィールドにインデックスを指定する必要がある場合、トランケーション・レングス・パラメータを使用することができます。%SQLSTRING は、expression の変換後に maxlen での切り捨てを実行します。変換された expression よりも maxlen の長さが長い場合は、パディングは追加されません。

%SYSTEM.UtilOpens in a new tab クラスの Collation()Opens in a new tab メソッドを使用すると、ObjectScript で同じ照合変換を実行できます。

  WRITE $SYSTEM.Util.Collation("The quick, BROWN fox.",8)

この関数は、ObjectScript から SQLSTRING()Opens in a new tab メソッド呼び出しを使用して呼び出すこともできます。

  WRITE $SYSTEM.SQL.SQLSTRING("The quick, BROWN fox.")

これらのメソッドの両方で、SQLSTRING 変換後の切り捨てがサポートされます。切り捨てられた長さには、追加された空白も含まれます。

  WRITE $SYSTEM.Util.Collation("The quick, BROWN fox.",8,6),!
  WRITE $SYSTEM.SQL.SQLSTRING("The quick, BROWN fox.",6)

大文字/小文字を区別しない文字列変換に関しては、"%SQLUPPER" を参照してください。

Note:

システム全体の既定の照合を %SQLUPPER (大文字/小文字の区別なし) から %SQLSTRING (大文字/小文字の区別あり) に変更するには、以下のコマンドを使用します。

  WRITE $$SetEnvironment^%apiOBJ("collation","%Library.String","SQLSTRING")

このコマンドを発行した後に、インデックスを削除し、すべてのクラスを再コンパイルしてから、再度インデックスを構築する必要があります。他のユーザがテーブルのデータにアクセスしている間はインデックスを再構築しないでください。再構築すると、クエリ結果が不正確になる可能性があります。

以下のクエリは、WHERE 節で %SQLSTRING を使用して、大文字と小文字を区別して選択を実行します。

SELECT Name FROM Sample.Person
WHERE %SQLSTRING Name %STARTSWITH %SQLSTRING 'Al'
ORDER BY Name

既定では、%STARTSWITH の文字列比較は大文字と小文字が区別されません。この例では、%SQLSTRING フォーマットを使用して、大文字と小文字を区別して比較を行います。これは “Al” で始まるすべての名前を返します (Allen、Alton など)。%STARTSWITH を使用する場合は、%SQLSTRING 照合を文の両側に適用する必要があります。

以下の例は、%SQLSTRING を文字列トランケーションと共に使用して、各名前の最初の 2 文字を返します。文字列トランケーションは、%SQLSTRING が先頭の空白を追加するため、3 (2 ではなく) になります。ORDER BY 節は、この 2 文字フィールドを使用して、行におおまかな照合順を配置します。

SELECT Name, %SQLSTRING(Name,3) AS FirstTwo
FROM Sample.Person
ORDER BY FirstTwo

この例は、切り捨てられた値を、大文字と小文字の区別を変更せずに返します。切り捨てられた値を大文字に変換して返すには、%STRING を使用します。

以下の例では、%SQLSTRING をサブクエリに適用しています。

SELECT TOP 5 Name, %SQLSTRING((SELECT Name FROM Sample.Company),10) AS Company
FROM Sample.Person

関連項目

FeedbackOpens in a new tab