SQL関数拡充機能により利用できる関数の説明と、注意事項を以下に示します。
SQL関数の利用形式 | 戻り値 の型 | 説明 | 実行例 | カラムナテーブル利用時における注意事項 | |
---|---|---|---|---|---|
関数指定例 | 結果 | ||||
STRPOS(string, substring) | int | 指定した部分文字列の位置を特定します。 | STRPOS('high', 'ig') | 2 | 指定できる引数は以下のとおりです。
|
SUBSTRING(string [from int] [for int]) | text | 指定した形式に一致する部分文字列を取り出します。 | SUBSTRING('Thomas' from 2 for 3) | hom | 指定できる引数は以下のとおりです。
|
TRIM([leading | trailing | both] [‘ ’] from string) | text | 空白文字のみを含む最も長い文字列を、第1引数:stringの先頭、末尾、そしてその両方から削除します。 なお、省略値は“both”です。
| TRIM(both ' ' from ' Tom ') | Tom | 指定できる引数は、以下のとおりです。
|
EXTRACT(field FROM source) | int | 部分フィールドを取得します。 | EXTRACT(hour FROM CAST('2001-02-16 20:38:40' AS timestamp) | 20 | 詳細は、“EXTRACT(field FROM source)”を参照してください。 |
CURRENT_DATE | date | 現在の日付を取得します。 | CURRENT_DATE | 2001-02-16 | 同一トランザクションでも異なる値になることがあります。 |
TRUNC(dp or numeric) | numeric | 指定したデータから小数点以下を切り捨てます。 | TRUNC(42.8) | 42 | 戻り値の型はnumericです。 |
TRUNC(v numeric, s int) | numeric | 指定したデータから小数点以下を第2引数:sの桁で切り捨てます。 | TRUNC(42.4382, 2) | 42.43 | 第2引数は、-126~126の値で指定します。 |
日付/時刻演算子 |
| 日付/時刻型データに対して、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型の評価式とする必要があります。 |
int型
以下のフィールドを指定できます。
なお、各フィールド名の意味にある抽出内容によって、格納先のデータ型を指定してください。
たとえば、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 |
注意
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
引数
ありません。
戻り値
timestamp型
実行例
(例)カラムナテーブル名:colmntblに対して実行した場合
SELECT CURRENT_TIMESTAMP, * FROM colmntbl; Result: 2001-12-23 17:00:41.286039+09, data1
日付/時刻演算子
本機能で拡充する日付/時刻演算子の詳細について、説明します。
使用可能となる日付/時刻演算子は、以下のとおりです。なお、以下の表に記載されていない日付/時刻演算の使用可否は、従来どおりです。
No | 演算子 | データ型の組合せ | 実行例 | |
---|---|---|---|---|
指定例 | 結果 | |||
1 | + |
|
| 型:timestamp 値の例:'2001-09-29 00:00:00' |
2 | + |
|
| 型:time 値の例:'04:00:00' |
3 | + |
|
| 型: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' |
注意
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型に指定できません。