LOWER スカラー関数

LOWER 関数は、すべての文字を小文字に変換したストリングを戻します。

構文図を読むビジュアルシンタックスダイアグラムをスキップするLOWER( 文字列式,ロケール名文字列,整数)

スキーマは SYSIBM です。

文字列式
変換対象のストリングを指定する式。 string-expression は、組み込みの文字ストリングまたはグラフィック・ストリングの値を戻す必要があります。 文字ストリング引数は CLOB であってはならず、グラフィック・ストリング引数は DBCLOB であってはなりません。 string-expression が EBCDIC グラフィック・ストリングの場合、locale-name-string にはブランク・ストリングを指定できません。 string-expression がビット・データの場合、locale-name-string は指定できません。

引数を数値データ・タイプにすることもできます。 数値引数は、暗黙的に VARCHAR データ・タイプにキャストされます。

ロケール名文字列
有効なロケール名を指定する、CLOB または DBCLOB 以外のストリング定数またはストリング・ホスト変数。 locale-name-string が EBCDIC でない場合は、EBCDIC に変換されます。 locale-name-string の長さは、EBCDIC表現で1~255バイトの範囲でなければなりません。 locale-name-string の値は大/小文字の区別がなく、また有効ロケールでなければなりません。 ロケールおよびその命名規則の詳細については、「ダイナミックリンクライブラリ(DLL)の構築と使用 」を参照してください。 以下はロケールの例です。
  • Fr_BE
  • Fr_FR@EURO
  • En_US
  • Ja_JP

変換処理は、ロケール名に対して指定された値により、以下のように決定されます。

ブランク
SBCS の大文字 A から Z は SBCS の小文字 a から z に変換され、ダイアクリティカル符号付きの文字は変換されません。 ストリングに MIXED 文字または DBCS 文字が含まれている場合、全角のローマ字大文字 A から Z は全角のローマ字小文字 a から z に変換されます。 パフォーマンスを最適にするために、特定のロケールで定義された規則を使用してデータを処理しなければならない場合を除いて、ブランク・ストリングを指定してください。
UNI
変換では 、[変換の選択] で説明されているように、標準および特殊文字の変換機能の両方が使用されます。 string-expression が EBCDIC データである場合は、UNI を指定できません。
UNI_60
変換には、Unicode Standard 6.0.0 および NORMAL 大文字・小文字変換機能を使用します。詳細は 、「変換の選択」 を参照してください。 ストリング式 が EBCDIC データの場合は、UNI_60 を指定してはなりません。
UNI_90
変換には、Unicode Standard 9.0.0 および NORMAL 大文字・小文字変換機能を使用します。詳細は 、「変換の選択」 を参照してください。 文字列表現がEBCDICデータの場合、 UNI_90 を指定してはいけません。
UNI_SIMPLE
ケース変換は 、選択した変換で説明されているように、標準の大文字・小文字変換機能を使用します。 UNI_SIMPLE は EBCDIC データでは使用できません。
ロケール名
ロケールは、小文字への変換の規則を定義します。

ホスト変数の値は NULL であってはなりません。 ホスト変数に標識変数がある場合、その標識変数の値は NULL 値を示すものであってはなりません。 ロケール名は、以下のようになっていなければなりません。

  • ホスト変数内では左寄せ
  • 長さがホスト変数の長さより短く、ホスト変数が固定長文字データ・タイプまたはグラフィック・データ・タイプの場合は、右側にブランクを埋め込み

locale-name-string を指定しないと、ロケールは特殊レジスター CURRENT LOCALE LC_CTYPE によって決定されます。 特殊レジスタの詳細については、 現在のロケールLC_CTYPE特殊レジスタを参照してください。 ただし、索引が LOWER 関数を参照する場合は、索引を使用できるかどうかを判別するために、ローカルは次のように (以下の順番で) 決められます。

  • 準備時: CURRENT LOCALE LC_CTYPE 特殊レジスターの値を使用する
  • バインド時: インストール・パネル DSNTIPF の LOCALE LC_CTYPE フィールドの値を使用する

アクセス・パスで索引が選択された場合、CURRENT LOCALE LC_CTYPE 特殊レジスター内のロケールは、準備時またはバインド時、および実行時に同じままであることが必要です。 この依存関係を避けるために、locale-name-string は省略しないでください。

式に基づく索引で LOWER 関数を参照する場合は、locale-name-string を指定する必要があります。 照会で索引を使用する方法については、例のセクションを参照してください。

整数
結果の長さ属性を指定する整数値。 指定する場合、 integer はstring-expression のエンコード スキームの表現で 1 ~ 32704 バイトの範囲の整数定数である必要があります。

integer を指定しない場合、結果の長さ属性は string-expression の 長さと同じになります。

Unicode データの場合、LOWER 関数を使用すると、特定の文字を処理したときに拡張が生じることがあります。 例えば、('Ì') —UX'00CC'— を実行すると、UX'006903070300' となります (そのとき LT_LT ロケールが有効な場合)。 結果の長さが式の結果を収容するのに十分な大きさであることを確認する必要があります。

結果はnullになる可能性があります。引数がnullの場合、結果もnull値となります。

代替構文:
LCASE は LOWER のシノニムです。 LOWER は、SQL 標準に準拠するために使用する必要があります。

例 1:
ホスト変数 NAME の値の文字を小文字で戻します。 NAME のデータ・タイプは VARCHAR(30) で、値は「Christine Smith」です。 有効なロケールがブランクであると仮定します。
  SELECT LCASE(:NAME)
    FROM SYSIBM.SYSDUMMY1;
結果の値は「christine smith」です。
例 2:
小文字の「Ì」を返します。 有効なロケールは LT_LT であると仮定します。
SELECT LOWER('Ì')
  FROM SYSIBM.SYSDUMMYU;
この結果はエラーとなります。その理 由は、ある種の Unicode 文字の処理時点で発生する拡張があるからです。 このエラーを防止するには、代わりに以下の ステートメントを使用する必要があります。
SELECT LOWER(VARCHAR('Ì', 3))
  FROM SYSIBM.SYSDUMMYU;
前のステートメントの結果は、UX'006903070300' の値となります。
例 3:
ロケール名が 'LT_LT' の組み込み関数 LOWER に基づいて、表 EMPLOYEE の索引 EMPLOYEE_NAME_LOWER を作成します。
  CREATE INDEX EMPLOYEE_NAME_LOWER
    ON EMPLOYEE (LOWER(LASTNAME, 'LT_LT', 60),
                 LOWER(FIRSTNAME, 'LT_LT', 60),
                 ID);
例 4:
デフォルトのローカル値 ' ' を使用して、LOWER 関数に基づいて表 T1 の索引 LNAME を作成します。次に、同じ式を照会に指定します。
   CREATE INDEX LNAME
     ON TI (LOWER(LASTNAME, ' '));

   SELECT LOWER(LASTNAME, ' ')
     FROM TI
     WHERE LOWER(LASTNAME, ' ') = 'smith'; 
例 5:
表 T1 のロケール名 'FR_CA' を使用して、LOWER 関数に基づく索引 LNAME を作成します。 次に、照会で同じ式を指定しますが、locale-name-string は省略します。
   CREATE INDEX LNAME
     ON TI (LOWER(LASTNAME, 'FR_CA')); 
照会が動的ステートメントであり、CURRENT LOCALE LC_CTYPE 特殊レジスターに「FR_CA」が入っている場合:
   SELECT LASTNAME
     FROM TI
     WHERE LOWER(LASTNAME)='smith';

準備時に、CURRENT LOCALE LC_CTYPE 内のロケール「FR_CA」を述部の LOWER(LASTNAME) に適用して、索引 LNAME を索引アクセスに使用できるかどうかを判別します。 実行時に、索引 LNAME がアクセス・パス選択に使用される場合、CURRENT LOCALE LC_CTYPE 内のロケールは同じままでなければなりません。

照会が静的ステートメントであり、ロケール「FR_CA」がインストール・パネル DSNTIPF の LOCALE LC_CTYPE フィールドで設定された場合:
   SELECT LASTNAME
     FROM TI
     WHERE LOWER(LASTNAME)='smith';

バインド時に、インストール・パネル DSNTIPF の LOCALE LC_CTYPE ファイル内のローカル「FR_CA」を述部の LOWER(LASTNAME) に適用して、索引 LNAME を索引アクセスに使用するかどうかを判別します。 アクセス・パス選択で索引 LNAME が選択された場合、CURRENT LOCALE LC_CTYPE 特殊レジスター内のロケールには「FR_CA」が入っていなければなりません。