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?

%SQLUPPER

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

Synopsis

%SQLUPPER(expression[,maxlen]) 
%SQLUPPER expression

引数

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

概要

既定の照合は SQLUPPER です。

%SQLUPPER は、expression を (大文字と小文字を区別しない) 大文字の文字列としてソートされる形式に変換します。%SQLUPPER は、すべてのアルファベット文字を大文字に変換し、後続の空白 (スペースやタブなど) を削除し、文字列の最初の部分に空白を 1 つ追加します。この追加された空白は、NULL と数値を文字列として照合します。

SQL では、数値を関数に渡す前に、先頭と末尾にあるゼロを削除したり、指数を展開したりすることにより、キャノニック形式に変換します。数値文字列はキャノニック形式に変換されません。

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

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

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

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

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

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

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

Note:

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

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

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

その他の大文字/小文字変換関数

%SQLUPPER 関数は、大文字と小文字を区別しない比較または照合に対してデータ値を変換する、SQL で優先的な方法です。%SQLUPPER は、データの最初の部分に空白を追加します。それによって、数値データと NULL 値を文字列として解釈させます。

以下は、データ値を大文字/小文字変換するその他の関数です。

  • %ALPHAUP : 文字を大文字に変換し、数字文字には影響を与えず、コンマと疑問符以外のすべての句読点文字を削除し (マイナス記号、および数値の小数点区切り文字として使用されているピリオドの削除を含む)、すべての空白 (先頭、末尾、埋め込み) を削除します。数値を文字列として解釈する変換を強制的に実行しません。

  • UPPER%UPPER、および UCASE : 文字を大文字に変換し、数字文字、句読点、埋め込みおよび先頭と末尾の空白に影響を与えません。数値を文字列として解釈する変換を強制的に実行しません。

  • LOWER および LCASE : 文字を小文字に変換し、数字文字、句読点、埋め込みおよび先頭と末尾の空白に影響を与えません。数値を文字列として解釈する変換を強制的に実行しません。

  • %STRING : 文字を大文字に変換し、コンマ以外のすべての句読点を削除し (マイナス記号、および数値の小数点区切り文字として使用されているピリオドの削除を含む)、すべての空白 (先頭、末尾、埋め込み) を削除します。データの最初の部分に空白を追加します。それによって、数値データと NULL 値を文字列として解釈させます。

  • %SQLSTRING : 文字の大文字小文字を変換しません。ただし、データの最初の部分に空白を追加します。それによって、数値データと NULL 値を文字列として解釈させます。

英数字の照合順序

大小文字変換関数は、以下のような異なるアルゴリズムを使用して数字で始まるデータ値を照合します。

%ALPHAUP および %STRING %SQLUPPER%SQLSTRING、およびその他の大小文字変換関数
5988 Clinton Avenue, 6023 Washington Court, 6090 Elm Court, 6185 Clinton Drive, 6209 Clinton Street, 6284 Oak Drive, 6310 Franklin Street, 6406 Maple Place, 641 First Place, 6572 First Avenue, 6643 First Street, 665 Ash Drive, 66 Main Street, 672 Main Court, 6754 Oak Court, 6986 Madison Blvd, 6 Oak Avenue, 7000 Ash Court, 709 Oak Avenue 5988 Clinton Avenue, 6 Oak Avenue, 6023 Washington Court, 6090 Elm Court, 6185 Clinton Drive, 6209 Clinton Street, 6284 Oak Drive, 6310 Franklin Street, 6406 Maple Place, 641 First Place, 6572 First Avenue, 66 Main Street, 6643 First Street, 665 Ash Drive, 672 Main Court, 6754 Oak Court, 6986 Madison Blvd, 7000 Ash Court, 709 Oak Avenue

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

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

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

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

関連項目

FeedbackOpens in a new tab