ページの先頭行へ戻る
Symfoware Analytics ServerV12.3.x 利用ガイド
FUJITSU Software

E.1.1 SQL関数拡充機能

SQL関数拡充機能により利用できる関数の説明と、注意事項を以下に示します。

表E.1 各SQL関数の仕様

SQL関数の利用形式

戻り値

の型

説明

実行例

カラムナテーブル利用時における注意事項

関数指定例

結果

STRPOS(string, substring)

int

指定した部分文字列の位置を特定します。

STRPOS('high', 'ig')

2

指定できる引数は以下のとおりです。

  • 第1引数
    stringには、32KB - 1以内の文字列で指定します。

  • 第2引数
    substringには、255バイト以内の文字列で指定します。
    なお、テーブル定義済みのカラム名で指定する場合、255バイト以内のデータ型で定義されたカラム名を対象としてください。
    256バイト以上のデータ型で定義されたカラム名を指定すると、エラーになります。

SUBSTRING(string [from int] [for int])

text

指定した形式に一致する部分文字列を取り出します。

SUBSTRING('Thomas' from 2 for 3)

hom

指定できる引数は以下のとおりです。

  • 第1引数
    stringには、32KB - 1以内の文字列で指定します。

  • 第2引数
    “from int”には、1 から 32KB - 1の値で指定します。
    省略値は、1です。

  • 第3引数
    “for int”には、1 から 32KB - 1の値で指定します。
    省略値は、32KB - 1です。

TRIM([leading | trailing | both] [‘ ’] from string)

text

空白文字のみを含む最も長い文字列を、第1引数:stringの先頭、末尾、そしてその両方から削除します。
削除位置は、第1引数に以下のどれかを指定します。

なお、省略値は“both”です。

  • leading:先頭

  • trailing:末尾

  • both:両方

TRIM(both ' ' from ' Tom ')

Tom

指定できる引数は、以下のとおりです。

  • 第2引数
    空白のみ指定可能です。

  • 第3引数
    stringには、32KB - 1以内の文字列で指定します。

EXTRACT(field FROM source)

int

部分フィールドを取得します。
sourceには、timestamp型のデータを指定します。
詳細は、“EXTRACT(field FROM source)”を参照してください。

EXTRACT(hour FROM CAST('2001-02-16 20:38:40' AS timestamp)

20

詳細は、“EXTRACT(field FROM source)”を参照してください。

CURRENT_DATE

date

現在の日付を取得します。
詳細は、“CURRENT_DATE”を参照してください。

CURRENT_DATE

2001-02-16

同一トランザクションでも異なる値になることがあります。

TRUNC(dp or numeric)

numeric

指定したデータから小数点以下を切り捨てます。

TRUNC(42.8)

42

戻り値の型はnumericです。
なお、定数値は指定できません。

TRUNC(v numeric, s int)

numeric

指定したデータから小数点以下を第2引数:sの桁で切り捨てます。
なお、第2引数:sが負の場合は整数桁を切り捨てます。

TRUNC(42.4382, 2)

42.43

第2引数は、-126~126の値で指定します。

日付/時刻演算子

  • time

  • timestamp

日付/時刻型データに対して、interval型の値を用いた演算を行います。
詳細は、“日付/時刻演算子”を参照してください。

CAST('2001-09-28' AS timestamp) + interval '1 hour'

2001-09-28 01:00:00

詳細は、“日付/時刻演算子”を参照してください。

EXTRACT(field FROM source)

機能

EXTRACT関数は、日付/時刻型の値から年や時などの部分フィールドを抽出します。


書式

EXTRACT(field FROM source)


引数

引数

データ型

意味

field

““field”に指定可能なフィールド名”の一覧から指定してください。

sourceの値からどのフィールドを抽出するかを選択する識別子です。
なお、文字列は指定できません。

source

  • timestamp型

  • time型

  • date型

timestamp型またはtime型の評価式とする必要があります。
なお、date型の評価式はtimestamp型にキャストされるため、使用可能です。
なお、date型の定数値は指定できません。


戻り値

int型


“field”に指定できるフィールド名

以下のフィールドを指定できます。
なお、各フィールド名の意味にある抽出内容によって、格納先のデータ型を指定してください。
たとえば、day、dow、およびdoyは、日付、曜日の値を抽出するため、time型には格納できません。

フィールド名

意味

実行例

day

(月内の)日付フィールドを1~31の値で抽出します。

SELECT EXTRACT(DAY FROM CAST('2001-02-16 20:38:40' AS TIMESTAMP));

Result: 16

dow

日曜日から土曜日までの曜日を1~7の値で抽出します。

SELECT EXTRACT(DOW FROM CAST('2001-02-16 20:38:40' AS TIMESTAMP));

Result: 6

doy

年内での通算日数を1~365または1~366の値で抽出します。

SELECT EXTRACT(DOY FROM CAST('2001-02-16 20:38:40' AS TIMESTAMP));

Result: 47

hour

時のフィールドを0~23の値で抽出します。

SELECT EXTRACT(HOUR FROM CAST('2001-02-16 20:38:40' AS TIMESTAMP));

Result: 20

microseconds

1,000,000を乗じられたマイクロ秒フィールドを0 ~ 999999の値で抽出します。

秒を含みません。

SELECT EXTRACT(MICROSECONDS FROM CAST('17:12:28.5' AS TIME));

Result: 500,000

milliseconds

1,000を乗じられたミリ秒フィールドを0 ~ 999の値で抽出します。秒を含みません。

SELECT EXTRACT(MILLISECONDS FROM CAST('17:12:28.5' AS TIME));

Result: 500

minute

分フィールドを0~59の値で抽出します。

SELECT EXTRACT(MINUTE FROM CAST('2001-02-16 20:38:40' AS TIMESTAMP));

Result: 38

month

年内の月番号を1~12の値で抽出します。

SELECT EXTRACT(MONTH FROM CAST('2001-02-16 20:38:40' AS TIMESTAMP));

Result: 2

quarter

その日付が含まれる年の四半期を1~4の値で抽出します。

SELECT EXTRACT(QUARTER FROM CAST('2001-02-16 20:38:40' AS TIMESTAMP));

Result: 1

second

秒フィールドを0 ~ 59の値で抽出します。なお、端数を含みません。

また、閏秒(60)には対応していません。

SELECT EXTRACT(SECOND FROM CAST('2001-02-16 20:38:40' AS TIMESTAMP));

Result: 40

SELECT EXTRACT(SECOND FROM CAST('17:12:28.5' AS TIME));

Result: 28

week

その日の年間通算での週を計算して、抽出します。

なお、その年の1月1日を含む週をその年の第1週としています。

SELECT EXTRACT(WEEK FROM CAST('2001-02-16 20:38:40' AS TIMESTAMP));

Result: 7

year

年フィールドを抽出します。

AD零年が存在しないことは忘れないでください。

このためADの年からBCの年を減する時には注意が必要です。

SELECT EXTRACT(YEAR FROM CAST('2001-02-16 20:38:40' AS TIMESTAMP));

Result: 2001


注意

“field”に指定できないフィールド名

Symfoware Analytics ServerのカラムナテーブルをPostgreSQLインターフェースで操作する場合は、以下のフィールドは指定できません。指定しないでください。

  • century

  • decade

  • epoch

  • isodow

  • isoyear

  • millennium

  • timezone

  • timezone_hour

  • timezone_minute

CURRENT_DATE

機能

CURRENT_DATE関数は、クエリ実行時の時刻を返却します。返却値は、同一トランザクションでも異なる値になる場合があります。


書式

CURRENT_DATE


引数

ありません。

戻り値

date型

実行例
(例)カラムナテーブル名:colmntblに対して実行した場合
SELECT CURRENT_DATE, * FROM colmntbl;
Result: 2001-12-23, data1

注意

日付や時刻における未サポート関数

Symfoware Analytics ServerのカラムナテーブルにPostgreSQLインターフェースで操作する場合は、以下の関数はサポートしていません。利用しないでください。

  • CURRENT_TIME

  • CURRENT_TIME(precision)

  • CURRENT_TIMESTAMP(precision)

  • LOCALTIME

  • LOCALTIMESTAMP

  • LOCALTIME(precision)

  • LOCALTIMESTAMP(precision)

参考

CURRENT_TIMESTAMP

CURRENT_TIMESTAMP関数は、本機能の拡張なしでも使用できます。

  • 機能
    クエリ実行時の時間帯を返却します。

  • 書式
    CURRENT_TIMESTAMP

  • 引数
    ありません。

  • 戻り値
    timestamp型

  • 実行例
    (例)カラムナテーブル名:colmntblに対して実行した場合

    SELECT CURRENT_TIMESTAMP, * FROM colmntbl;
    Result: 2001-12-23 17:00:41.286039+09, data1

日付/時刻演算子

本機能で拡充する日付/時刻演算子の詳細について、説明します。

使用可能となる日付/時刻演算子は、以下のとおりです。なお、以下の表に記載されていない日付/時刻演算の使用可否は、従来どおりです。

表E.2 各演算子の仕様

No

演算子

データ型の組合せ

実行例

指定例

結果

1

+

  • date + interval

  • interval + date

  • CAST('2001-09-28' AS date) + interval '1 day'

  • interval '1 day' + CAST('2001-09-28' AS date)

型:timestamp

値の例:'2001-09-29 00:00:00'

2

+

  • time + interval

  • interval + time

  • CAST('01:00' AS time) + interval '3 hour'

  • interval '3 hour' + CAST('01:00' AS time)

型:time

値の例:'04:00:00'

3

+

  • timestamp + interval

  • interval + timestamp

  • CAST('2001-09-28 01:00' AS timestamp) + interval '24 hour'

  • interval '24 hour' + CAST('2001-09-28 01:00' AS timestamp)

型:timestamp

値の例:'2001-09-29 01:00:00'

4

-

date - interval

CAST('2001-09-28' AS date) - interval '1 hour'

型:timestamp

値の例:'2001-09-27 00:00:00'

5

-

time - interval

CAST('05:00' AS time) - interval '2 hour'

型:time

値の例:'03:00:00'

6

-

timestamp - interval

CAST('2001-09-28 23:00' AS timestamp) - interval '22 hour'

型:timestamp

値の例:'2001-09-28 01:00:00'

注意

PostgreSQLインターフェースとの違い

Symfoware Analytics ServerのカラムナテーブルにPostgreSQLインターフェースで操作する場合の仕様は、以下のとおりです。

  • “各演算子の仕様”のNo.1および4では、演算結果の時刻部分は必ず“00:00:00”になります。時刻部分に対して有効な結果を得るには、事前にdate型の値をtimestamp型にCASTしてから演算してください。

  • interval型を使用する場合、必ず“型名 値”の形式で指定してください。
    たとえば、interval型を使用して1日を指定するには、以下のように指定してください。

    interval '1 day'

    interval型以外のデータ型を使用する場合、“型名 値”の形式では指定できません。以下のように数値を足すか、CAST関数を利用してください。

    CURRENT_DATE + 7
  • interval型に指定できる書式
    interval型に指定できる書式は、以下のとおりです。

    quantity unit
    • quantity:時間量(整数値)

    • unit:単位

    quantity、unitには、以下を指定できます。なお、decade、century、millennium、簡略形、および複数形は指定できません。

    • year : 年

    • month : 月

    • week : 週

    • day : 日

    • hour : 時

    • minute : 分

    • second : 秒

    • millisecond : ミリ秒

    • microsecond : マイクロ秒

  • 秒フィールドに保有されている小数点以下の桁数のオプションの精度値は、interval型に指定できません。