# CHAPTER 10: 関数

## 10.1 はじめに

Empressの関数には、集計関数、組込み関数、数学関数、ユーザ定義関数、ユーザ定義集計関数に分類できます。

集計関数は、`COUNT`、`MAX`、`MIN`、`SUM`、`AVG`です。

以下に組込み関数を示します。

abs ( ) ceiling ( ) datenext ( ) floor ( ) is_decimal ( ) is_integer ( ) is_white ( ) | length ( ) lpad ( ) lscan ( ) ltrim ( ) nullval ( ) round ( ) | rpad ( ) rscan ( ) rstrindex ( ) rtrim ( ) sign ( ) strdel ( ) | strindex ( ) strins ( ) substr ( ) tolower ( ) toupper ( ) trunc ( )

使用可能な数学関数は、システムに依存します。以下に示す関数のサブセットとなります。

acos asin atan atan2 ceil cos cosh erf erfc | expr fabs floor fmod frexp frexpman frexpexp gamma hypot | j0 j1 jn jdexp log log10 modf modffrac modfint | pow sin sinh sqrt tan tanh y0 y1 yn

ユーザ定義関数、ユーザ定義集計関数については、Empress:ユーザ定義関数の マニュアルを参照してください。

## 10.2 集計関数

`SELECT`コマンド、あるいは式においてレコードやグループに適用できる 関数は、`COUNT`、`MAX`、`MIN`、`SUM`、`AVG`の 5つがあります。

### 10.2.1 COUNT関数

`SELECT`または式で、`COUNT`関数を使用すると、各グループの レコード数がカウントされます。コマンドに`GROUP BY`句がない場合には、 選択された全てのレコードを1つのグループとして、関数はそのレコード数を 返します。

`COUNT`関数は、選択する項目のリストおよび`HAVING`句に指定 できます。

Syntax

  `COUNT [` | `|(*) |expr |(DISTINCT |` | `|attr |expr` | `|) |` | `|] | | |`

注意

  `DISTINCT`または`UNIQUE`が指定された場合、重複値はカウント されません。選択する項目のリストに条件を設定する場合、`DISTINCT`は1度 しか使用できません。`DISTINCT`を`COUNT`関数の外部で指定した場合、 カウントには重複値もカウントされます。

例

1. シンプルな例

   `loans`テーブルのレコード数をカウントします。

          SELECT COUNT FROM loans;

   以下のような表示をします。

          COUNT (*)

          12

   または

          SELECT COUNT (*) FROM loans;

   と指定しても、同一の結果を返します。

2. フィールド値がユニークなレコードの数をカウントします。

   `loans`テーブルの社員数をカウントします。

          SELECT COUNT (DISTINCT name) FROM loans;

   以下のような結果を返します。

          COUNT (DISTINCT name)

          6

3. フィールドの値を条件を付けてカウントします。

   `loans`テーブルで、`name`フィールドが`Mosca`のレコード をカウントします。

          SELECT COUNT FROM loans WHERE name = 'Mosca';

   以下のような結果を返します。

          COUNT (*)

          2

   `personnel`テーブルで、`phone`フィールド値が'961'で始まる レコードをカウントします。

          SELECT COUNT FROM personnel
             WHERE phone match "961*";

   以下のような結果を返します。

          COUNT (*)

          1

4. 他の検索項目と共に関数を使用します。

   `COUNT`関数は、他の検索項目と共に使用できます。

          SELECT name, amount, COUNT FROM loans;

   以下のような結果を返します。

          name          amount

          Mosca         $150.00
          Jones          $33.95
          Kilroy        $250.00
          Wladislaw      $55.00
          Jones          $25.00
          Mosca         $200.00
          Wladislaw      $25.00
          Peterson       $50.00
          Wladislaw      $75.00
          Jones         $300.00
          Scarlatti     $150.00
          Scarlatti     $125.00

          COUNT (*) = 12

### 10.2.2 AVG、MAX、MIN、SUM関数

`AVG`、`MAX`、`MIN`、`SUM`関数は、グループに 関する指定されたフィールドの値に適用されます。これらの関数は、以下の ような1つの値を返します。

  `SUM` | グループ内の集計値です。
  `AVG` | グループ内の平均値です。
  `MAX` | グループ内の最大値です。
  `MIN` | グループ内の最小値です。

Syntax

  `|AVG |MAX |MIN |SUM` | `| ([DISTINCT] attr) | | |`

注意

1. `SUM`と`AVG`は数値フィールドにのみ適用されます。 `UNIQUE`または`DISTINCT`が指定された場合、重複値は 除外されます。

2. `MAX`または`MIN`に、`DISTINCT`を指定しても効力がない ことに注意してください。

例

1. MAX関数の例

   `loans`テーブル中の、`amount`フィールドの最大値を検索します。

          SELECT MAX (amount) FROM loans;

   以下のような結果を表示します。

          MAX (amount)

          $300.00

2. MIN関数の例

   `loans`テーブル中の、`date`フィールドの最も古い日付を検索し ます。

          SELECT MIN (date) FROM loans;

   以下のような結果を表示します。

          MIN (date)

          2 February 1990

3. 条件付きのMAX関数の例

   `personnel`テーブル中の、`name`フィールドの先頭文字がA-Mで 始まるレコードの中で、`credit_limmit`の最大値を検索します。

          SELECT MAX (credit_limit) FROM personnel
             WHERE name < 'N';

   以下のような結果を表示します。

          MAX (credit_limit)

          $750.00

4. AVG関数の例

   `loans`テーブルの、`amount`フィールドの平均値を検索します。

          SELECT AVG (amount) FROM loans;

   以下のような結果を表示します。

          AVG (amount)

          119.91

5. 条件付きのSUM関数の例

   `loans`テーブル中の、`name`フィールドが"Mosca"の`amount` フィールドの集計値を検索します。

          SELECT SUM (amount) FROM loans
             WHERE name = 'Mosca';

   以下のような結果を表示します。

          SUM (amount)

          350.00

6. 関数の組み合わせ例

   関数は組み合わせて使用できます。

          SELECT COUNT, SUM (amount), AVG (amount), MAX (amount),
             MIN (amount) FROM loans;

   以下のような結果を表示します。

          COUNT(*)  SUM (amount)  AVG (amount)  MAX (amount)  MIN(amount)

          12        1438.95       119.91        $300.00       $25.00

### 10.2.3 重複の防止

キーワード`ALL`を使用したり、省略値を使用してフィールド値を検索した 場合、重複値が発生する場合があります。 この結果は、データベース処理として矛盾するものではありませんが、必ずしもユーザが希望する結果であるとは限りません。

       SELECT name FROM loans;

上記のコマンドでは、12レコードが検索されます。この検索結果には同一の名前が 複数含まれています。重複のないフィールド値を検索するには、`SELECT` コマンドに`DISTINCT`キーワードを指定します。

キーワード`DISTINCT`は、関数`SUM`、`AVG`、 `COUNT`の中で指定できます。

以下のコマンドは、重複値のないレコードを検索する例です。

        SELECT DISTINCT name FROM loans;

以下のような結果を表示します。

       name

       Mosca
       Jones
       Kilroy
       Wladislaw
       Peterson
       Scarlatti

`loans`テーブル中の、`name`フィールドに違う名前がいくつあるか 検索するには、以下のコマンドを使用します。

       SELECT COUNT (DISTINCT name) FROM loans;

以下のような結果を表示します。

       COUNT (DISTINCT name)

       6

## 10.3 組込み関数

以下に、Empressの組込み関数とその要約を示します。

Table 10-1: 組込み関数

組込み関数 | 概要
`abs ( )` | 指定された数値の絶対値を返します。
`ceiling ( )` | 指定された10進数値を、指定された小数部の桁数まで切り上げます。
`datenext ( )` | 指定された日付の次の日付を返します。
`floor ( )` | 指定された10進数値を、指定された小数部の桁数まで切り下げます。
`is_decimal ( )` | 指定された文字列を10進数値に変換します。
`is_integer ( )` | 指定された文字列を整数値に変換します。
`is_white ( )` | 指定された文字列に、スペース、タブ、新しい行、改行、垂直タブがある場合に真を返します。
`length ( )` | 指定された文字列の長さを返します。
`lpad ( )` | 指定された文字列の左端に、指定された文字を、指定された分追加します。
`lscan ( )` | 指定された文字列の左側から、指定された文字が、指定された回数にある先頭位置を返します。
`ltrim ( )` | 指定された文字列の左側から、指定された文字を削除した文字列を返します。
`nullval ( )` | 指定されたフィールド値がNULLの場合、指定した値を返し、NULLでない場合はフィールド値を返します。
`round ( )` | 指定された10進数を、指定された小数部の桁数で四捨五入します。
`rpad ( )` | 指定された文字列の右端に、指定された文字を、指定された分追加します。
`rscan ( )` | 指定された文字列の右側から、指定された文字が、指定された回数にある先頭位置を返します。
`rstrindex ( )` | 指定された文字列で、指定された文字が、指定された回数にある先頭位置を返します。
`rtrim ( )` | 指定された文字列の右側から、指定された文字を削除した文字列を返します。
`sign ( )` | 指定された数値データの、符号に合わせて値を返します。
`strdel ( )` | 指定された文字列から、指定された位置から、指定された長さの文字列を削除した値を返します。
`strindex ( )` | 指定された文字列の、指定された位置から、指定された長さの文字列を返します。
`strins ( )` | 指定された文字列の、指定位置に、指定された文字列を挿入した値を返します。
`substr ( )` | 指定された文字列の、指定位置から、指定された長さの文字列を返します。
`tolower ( )` | 指定された文字列を、小文字に変換します。
`toupper ( )` | 指定された文字列を、大文字に変換します。
`trunc ( )` | 指定された10進数を、指定された小数部の桁数で切り捨てます。

詳細または例題は、Empress組込み関数を参照してください。

### 10.3.1 abs ( )

数値データの絶対値を返します。

Syntax

      abs (number)

  説明

  `number` | 数値か数値フィールドを指定します。

注意

  `NULL`フィールドは処理しません。

例

  以下は750を返します。

         abs (750-1500)

  以下は、`amout`フィールドの絶対値を返します。

         SELECT abs (amount) FROM loans;

### 10.3.2 ceiling ( )

指定された10進数値を、切り上げて返します。

Syntax

      ceiling (decimal [, digits])

  説明

  `decimal` | 数値、数値フィールド、数値式の結果。
  `digits` | 小数位の後の数字の数。正の数または負の数になります。省略値は0です。

注意

  `NULL`値は処理しません。

例

         ceiling (12.345)

  上記は13.0を返します。

         ceiling (12.345, 2)

  上記は12.35を返します。

         ceiling (12.345, -1)

  上記は20.0を返します。

### 10.3.3 datenext ( )

指定された日付の、次に指定された日付を返します。

Syntax

  `datenext (date,` | `|day_name |day_number` | `|) |`

  説明

  `date` | 日付文字列、または`DATE`、`TIME`データタイプのフィールド。
  `day_name` | 曜日。例 Monday, Tuesday, etc。
  `day_number` | 曜日数。例 1 is Monday, 2 is Tuesday, etc。

注意

1. 日付の数値付けは、日曜日を0としてはじめます。

2. `datenext()`は、`NULL`値は処理しません。

3. キーワード`TODAY`と`NOW`は、日付として使用できます。

例

  今日がMonday, February 2,1998である場合、

         datenext ("TODAY", "Monday")

  Febryary 9, 1998（TIMEフォーマットでは19980209000000)を返します。

  今日がMonday, February 2,1998である場合、

         datenext ("TODAY", 1)

  1はMondayを意味するため、前の例を同一の値を返します。

  今日がMonday, February 2,1998である場合、

      datenext ("TODAY", 2)

  February 3, 1998を返します。

### 10.3.4 floor ( )

fllor()は、指定された小数部の桁数まで切り捨てた値を返します。

Syntax

      floor (number [, digits])

  説明

  `number` | 数値または数値フィールド。
  `digit` | 小数位の後の数字の数。それは正の数または負の数になります。省略値は0です。

注意

1. `DOLLAR`データは、`FLOAT`に変換されます。

2. `NULL`値は処理しません。

例

         floor (12.345)

  上記は12.0を返します。

         floor (12.345, 2)

  上記は12.34を返します。

         floor (12.345, -1)

  上記は10.0を返します。

### 10.3.5 is_decimal ( )

真を返した場合、精度を失うことなく文字列をEmpressの10進数値に変換 します。

Syntax

      is_decimal (string [, max_digits [, decimal_places]])

  説明

  `string` | 任意の文字列、または`CHARACTER`、`TEXT`データタイプの フィールド。
  `max_digits` | 変換値のために許可された数字の最大数。省略値は15。
  `decimal_places` | 変換値のために許可された小数位の数。省略値は15。

注意

1. `NULL`値は処理しません。

2. `is_decimal`関数は、`WHERE`句で使用されます。

例

         is_decimal ("12.345", 5, 3)

  上記は真を返します。

         is_decimal ("12.3450", 5, 3)

  上記は真を返します。

         is_decimal ("12.3456", 5, 3)

  上記は偽を返します。

         SELECT FROM loans WHERE is_decimal (name);

  上記はレコードを検索しません。

### 10.3.6 is_integer ( )

指定された文字列を、精度を失うことなくEmpressの整数値に変換した場合、 真の値を返します。

Syntax

      is_integer (string [, nbytes])

  説明

  `string` | 任意の文字列、または`CHARACTER`、`TEXT`データタイプの フィールド。
  `nbytes` | バイト数。省略値は4。

注意

1. バイト数を指定すると、変換値が指定されたバイト数で収まる場合のみ、真の値を返します。指定できるバイト数 は1〜4であり、省略時は4となります。

2. `NULL`値は処理しません。

3. この関数は`WHERE`句で使用します。

例

  T1テーブルは、最大4文字のフィールドで、データとして"abcd"、"1234"、"123"の3レコードを持ちます。

         SELECT FROM T1 WHERE is_integer (ATTR1);

  上記は、123と1234を返します。

         SELECT FROM T1 WHERE is_integer (ATTR1, 1);

  上記は123を返します。

### 10.3.7 is_white ( )

指定された文字列に、スペース、タブ、行接続詞、改行、垂直タブなどの文字がある場合、真を返します。

Syntax

      is_white (string)

  説明

  `string` | 任意の文字列、または`CHARACTER`、`TEXT`データタイプの フィールド。

注意

1. `NULL`値を処理しません。

2. `WHERE`句で使用します。

例

  T1テーブルは、テキストフィールドがあり、3レコードを持っています。1レコードは、スペースとタブ、2行目は全て スペース、3行目はタブを持っています。

         SELECT FROM T1 WHERE is_white (ATTR1);

  上記は、2レコート目と3レコード目が該当します。

         SELECT FROM T1 WHERE not (is_white (ATTR1));

  上記は、1レコード目が該当します。

### 10.3.8 length ( )

指定された文字列のバイト長を返します。

Syntax

      length (string)

  説明

  `string` | 任意のデータタイプのフィールドの文字列。

注意

  `NULL`値は処理しません。

例

  テーブルT1は、最大10バイトの`Char`タイプのフィールドを持つテーブル で、Jim、John、Fredという3レコードを持っています。

         SELECT T1 WHERE length (name) > 3;

  上記は、JohnとFredを返します。

         length ("abc")

  上記は、3を返します。

### 10.3.9 lpad ( )

指定された文字列の左端に、指定された文字を指定された個数追加します。

Syntax

      lpad (string, pad_string [, [occurrence])

  説明

  `string` | `任意の文字列、または`CHARACTER`、`TEXT`データタイプの フィールド。`
  `pad_string` | `任意の文字列。`
  `occurrence` | `整数番号。`

注意

1. 指定された個数分文字を挿入します。

2. 埋め込み数が指定されていない場合、および指定されたものが文字列か `TEXT`データフィールドである場合、埋め込みは1回だけ行なわれます。

   指定文字列が、`Char`フィールドの場合、埋め込み回数は、データタイプの 最大値まで行なわれます。

例

  コマンド

         lpad ("program", "MY")

  上記は"111program"を返します。

  コマンド

         lpad ("program", "1", 3)

  上記は"111program"を返します。

  T1テーブルが、char(10,1)のデータタイプを持つCフィールドを持ち、データとして"abc"と"123456789"を持つ 場合に、以下のコマンドを発行した場合、

         SELECT lpad (C, "MY") FROM T1;

  以下の値を返します。

         MYMYMYabc
         123456789

### 10.3.10 lscan ( )

指定された文字列の中で、指定番目に見つかった、指定文字の開始位置を返します。

Syntax

      lscan (string, search_string [, occurrence ])

  説明

  `string` | 任意の文字列、または`CHARACTER`、`TEXT`データタイプの フィールド。
  `search_string` | 任意の文字列。
  `occurrence` | 整数番号。

注意

1. 指定文字列の、先頭文字位置は1です。

2. 何番目かの指定がない場合、最初に見つかったものの先頭位置を返します。

3. 検索文字列が見つからなかった場合、0を返します。

4. `lscan()`という関数名の代わりに、`strindex()`も使用できます。

5. `NULL`値は処理しません。

例

  コマンド

         lscan ("abcdef", "cd")

  上記は、3を返します。

  コマンド

         lscan ("abcdaef", "a", 2)

  上記は、5を返します。

### 10.3.11 ltrim ( )

指定された文字列から、指定した文字を削除して返します。

Syntax

      ltrim (string [, trim_set])

  説明

  `string` | 任意の文字列、または`CHARACTER`、`TEXT`データタイプの フィールド。
  `trim_set` | 任意の文字列。省略値はスペース、タブ、改行文字、垂直タブ、フォームフィード を含む、ホワイトスペースです。

注意

1. `NULL`値は処理しません。

2. 削除する文字の指定順は関係ありません。"xy"の指定と"yx"の指定は、同一の結果を返します。

例

  以下の例は、

         ltrim ("abcdef", "ab")

  上記は、"cdef"を返します。

  以下の例は、

         ltrim ("   abc")

  上記は、"abc"を返します。

### 10.3.12 nullval ( )

指定フィールドの値が`NULL`値の場合、`nullval()`に設定した値が 返されます。`NULL`値でない場合には、フィールド値が返されます。

Syntax

      nullval (attr, default_value)

  説明

  `default_value` | `attr`と同じ汎用データタイプの任意の文字列または、 任意のフィールド。

例

  T1テーブルは、最大10バイトの`Char`タイプの`name`フィールドを 持ち、データとして、NULL、"John"、"Fred"という3レコードがある場合。

         SELECT nullval (name, "X") FROM T1;

  上記は、"X"、"John"、""Fred"を返します。

### 10.3.13 round ( )

指定された10進数を、指定された小数部の桁数で四捨五入します。

Syntax

      round (number [, digits])

  説明

  `number` | 任意の数値または数値フィールド。
  `digits` | 小数位の後の数字の数。それは正の値にも負の値にもなります。省略値は0です。

注意

1. `DOLLAR`データは、`FLOAT`に変換されます。

2. `NULL`値は処理しません。

例

  以下の例は、

         round (12.345)

  上記は、12.0を返します。

  以下の例は、

         round (12.345, 2)

  上記は、12.35を返します。

  以下の例は、

         round (12.345, -1)

  上記は、10.0を返します。

### 10.3.14 rpad ( )

指定された文字列の右端に、指定した文字列を、指定回数追加した文字列を返します。

Syntax

      rpad (string, pad_string [, [occurrence])

  説明

  `string` | 任意の文字列、または`CHARACTER`、`TEXT`データタイプの フィールド。
  `pad_string` | 任意の文字列。
  `occurrence` | 整数番号。

注意

1. 指定された回数分、文字列に追加します。

2. 回数が指定されなかった場合、追加する回数は1回です。

   文字列にフィールド名が指定された場合、データタイプの最大値まで、追加することができます。

例

  以下の例は、

         rpad ("program", "MY")

  上記は、"programMY"を返します。

  以下の例は、

         rpad ("program", "1", 3)

  上記は、"program111"を返します。

  T1テーブルに、char(10,1)タイプのCフィールドを持っていて、"abc"と"123456789"というレコードを格納している 場合、以下のコマンドは、

         SELECT rpad (C, "MY") FROM T1;

  以下を表示します。

         abcMYMYMY
         123456789

### 10.3.15 rscan ( )

指定された文字列の右端から、指定された回数目の指定文字列の開始位置を返します。

Syntax

      rscan (string, search_string [, occurrence])

  説明

  `string` | 任意の文字列、または`CHARACTER`、`TEXT`データタイプの フィールド。
  `search_string` | 任意の文字列。
  `occurrence` | 整数番号。

注意

1. 検索は、右端から左へ行なわれ、左端の文字位置を1とします。

2. 回数目を指定しない場合は、最初に見つかった文字列の開始位置を返します。

3. 指定された文字列に、検索文字が見つからなかった場合には、0を返します。

4. `rscan()`の代わりに、`rstrindex()`を使用できます。

5. `NULL`値は処理しません。

例

  以下は、10を返します。

         rscan ("John and John", "John")

  以下は、1を返します。

         rscan ("John and John", "John", 2)

  以下は、0を返します。

         rscan (("John and John", "Jim")

### 10.3.16 rstrindex ( )

指定された文字列の右端から、指定された回数目の指定文字列の開始位置を返します。

Syntax

      rstrindex (string, search_string [, occurrence])

  説明

  `string` | 任意の文字列、または`CHARACTER`、`TEXT`データタイプの フィールド。
  `search_string` | 任意の文字列。
  `occurrence` | 整数番号。

注意

1. 検索は、右端から左へ行なわれ、左端の文字位置を1とします。

2. 回数目を指定しない場合は、最初に見つかった文字列の開始位置を返します。

3. 指定された文字列に、検索文字が見つからなかった場合には、0を返します。

4. `rstrindex()`の代わりに、`rscan()`を使用できます。

5. `NULL`値は処理しません。

例

  以下は、10を返します。

         rstrindex ("John and John", "John")

  以下は、1を返します。

         rstrindex ("John and John", "John", 2)

  以下は、0を返します。

         rstrindex (("John and John", "Jim")

### 10.3.17 rtrim ( )

指定された文字列の右端から、指定された文字を削除して返します。

Syntax

      rtrim (string [, trim_set])

  説明

  `string` | 任意の文字列、または`INTEGER`、`CHARACTER`、`TEXT` データタイプのフィールド。
  `trim_set` | 任意の文字列。省略値は、スペース、タブ、改行、垂直タブ、フォームフィードを 含むホワイトスペースです。

注意

1. 指定された文字を削除した残りの文字全てが、結果として返されます。

2. NULL値は処理しません。

3. 削除文字に指定する順番は処理に影響を与えません。"xy"と指定しても、"yx"と指定しても同一に結果を 返します。

例

  以下は、"abcdef"を返します。

         rtrim ("abcdef")

  以下は、"abcd"を返します。

         rtrim ("abcdef", "fe")

  以下は、"abcd"を返します。

         rtrim ("abcdef", "ef")

### 10.3.18 sign ( )

指定された数値の符号に合わせて値を返します。

Syntax

      sign (number)

  説明

  `number` | 任意の数値、数値データタイプのフィールド、式の結果。

注意

1. 正の値は1、ゼロは0、負の値は-1を返します。

2. NULL値は処理しません。

例

  以下は、-1を返します。

         sign (150-700)

  以下は、0を返します。

         sign (150-150)

  以下は、1を返します。

         sign (700-500)

### 10.3.19 strdel ( )

指定された文字列から、指定位置から指定長さの文字列を削除して返します。

Syntax

      strdel (string, position [, length])

  説明

  `string` | 任意の文字列、または`CHARACTER`、`TEXT`データタイプの フィールド。
  `position` | 文字列中の位置。
  `length` | 文字列の`positionから、削除する文字数。`. `INTEGER`フィールドも指定できます。省略値は1。

注意

1. 有効なデータタイプは、`CHAR`、`TEXT`、`BULK`です。

2. `NULL`値は処理しません。

例

  以下の値は、"ac"を返します。

         strdel ("abc", 2)

### 10.3.20 strindex ( )

指定された文字列の左端から、指定番目に見つかった、指定文字列の開始位置を返します。

Syntax

      strindex (string, search_string [, occurrence])

  説明

  `string` | 任意の文字列、または`CHARACTER`、`TEXT`データタイプの フィールド。
  `search_string` | 任意の文字列。
  `occurrence` | 整数番号。

注意

1. 文字列の開始文字位置は、1です。

2. 何番目かの指定がない場合、最初に見つかった文字列の開始位置を返します。

3. 検索文字が見つからなかった場合、0を返します。

4. `strindex()`の代わりに、`lscan()`を使用できます。

5. `NULL`値は処理しません。

例

  以下は、3を返します。

         strindex ("abcdef", "cd")

  以下は、5を返します。

         strindex ("abcdaef", "a", 2)

### 10.3.21 strins ( )

指定された文字列に、指定された挿入文字列を挿入して返します。

Syntax

      strins (string1, position, string2)

  説明

  `string1` | 任意の文字列。
  `string2` | 任意の文字列。
  `position` | 整数番号。

注意

1. 文字列の先頭文字の位置は1です。

2. `BULK`データタイプでは、機能しません。`BULK`データタイプで 同一の処理を行なうには、`substr()`関数と`concat`を使用します。

3. `NULL`値は処理しません。

例

  以下は、"abcd"を返します。

         strins ("ad", 2, "bc")

### 10.3.22 substr ( )

指定された文字列の、指定開始位置から、指定長さの文字列を抜き出し返します。

Syntax

      substr (string, position [, length ])

  説明

  `string` | 任意の文字列、または`CHARACTER`、`TEXT`データタイプの フィールド。
  `position` | 整数番号。
  `length` | 整数番号。省略値は文字列の長さ。

注意

1. 有効なデータタイプは、CHAR、TEXT、BULKです。

2. NULL値は処理しません。

例

  以下は、"bcde"を返します。

         substr ("abcde", 2)

  以下は、"bc"を返します。

         substr ("abcde", 2, 2)

  以下は、"4XX56"を返します。

         strins (subtr ("12345678910", 4, 3), 2, "XX")

### 10.3.23 tolower ( )

指定された文字列の英字部分を、全て小文字に変換して返します。

Syntax

      tolower (string)

  説明

  `string` | 任意の文字列、または`CHARACTER`、`TEXT`データタイプのフィールド。

例

  以下は、"foobar7"を返します。

         tolower ("FooBar7")

### 10.3.24 toupper ( )

指定された文字列の英字部分を、全て大文字に変換して返します。

Syntax

      toupper (string)

  説明

  `string` | 任意の文字列、または`CHARACTER`、`TEXT`データタイプの フィールド。

注意

  NULL値は処理しません。

例

  以下は、"FOOBAR7"を返します。

         toupper ("Foobar 7")

### 10.3.25 trunc ( )

指定された数値を、指定された小数部の桁数で切り捨てます。

Syntax

      trunc (number [, digits])

  説明

  `number` | 任意の数値、数値フィールド、式の結果。
  `digits` | 小数位の後の数字の数。それは正の数または負の数になります。省略値は0です。

注意

  NULL値は処理しません。

例

  以下は、12.00を返します。

         trunc (12.345)

  以下は、12.34を返します。

         trunc (12.345, 2)

  以下は、12500.00を返します。

         trunc (12506.78, -2)

  以下は、30.00を返します。

         trunc (10+20.25)

## 10.4 数学関数

使用可能な数学関数は、システムに依存します。使用できる関数は、以下に示す関数のサブセットとなります。各関数の 詳細については、使用しているシステムのマニュアルを参照してください。

Table 10-2: 数学関数

数学関数 | 概要
`acos ( )` | 入力値の、アークコサインを返します。
`asin ( )` | 入力値の、アークサインを返します。
`atan ( )` | 入力値の、アークタンジェントを返します。
`atan2 ( )` | 入力されたれた2つの数値の、アークタンジェントを返します。
`ceil ( )` | 入力値以上で、最小の整数値を返します。
`cos ( )` | 入力値の、コサインを返します。
`cosh ( )` | 入力値の、ハイバーボリックコサインを返します。
`erf ( )` | 入力値の、エラー関数を返します。
`erfc ( )` | 大きな入力値のために、erf()で失われた精度を修正するのに使用した数値を返します。
`exp ( )` | exを返します。xは入力値です。
`fabs ( )` | 入力値の絶対値を返します。
`floor ( )` | 入力値未満で、最大の整数値を返します。
`fmod ( )` | 入力値x、yの、xをyで除算した余りを浮動小数点で返します。0で除算した場合や、結果が オーバーフローした場合には、0を返します。
`frexp ( )` | 入力値値x、yの、仮数部x、指数部yの値を返します。
`frexpman ( )` | 入力値の仮数部を返します。
`frexpexp ( )` | 入力値の指数部を返します。
`gamma ( )` | 入力値の、ガンマ関数の値を返します。
`hypot ( )` | 入力値x、yの、x*x+y*yの平方根を返します。
`j0 ( )` | 階数0の第1種で入力した、ベッセル関数を返します。
`j1 ( )` | 階数1の第1種で入力した、ベッセル関数を返します。
`jn ( )` | 階数nの第1種で入力した、ベッセル関数を返します。
`ldexp ( )` | 入力値x、iの、x*2iを返します。
`log ( )` | 入力値の自然対数を返します。
`log10 ( )` | 入力値の10を底とした、対数を返します。
`modf ( )` | 入力値x、yの、xの端数部分を返し、yに指定した位置に整数部分を返します。
`modffrac ( )` | 入力値の端数を返します。
`modfint ( )` | 入力値の整数を返します。
`pow ( )` | 入力値x、yの、xyを返します。
`sin ( )` | 入力値の、サインを返します。
`sinh ( )` | 入力値の、ハイボーリックサインを返します。
`sqrt ( )` | 入力値の平方根を返します。
`tan ( )` | 入力値の、タンジェントを返します。
`tanh ( )` | 入力値の、ハイボーリックタンジェントを返します。
`y0 ( )` | 階数0の第2種で入力した、ベッセル関数を返します。
`y1 ( )` | 階数1の第2種で入力した、ベッセル関数を返します。
`yn ( )` | 階数nの第2種で入力した、ベッセル関数を返します。