その他の関数¶
その他の関数:
COALESCE¶
説明
COALESCE
関数は、NULL でない最初の引数を返します。 COALESCE
は、次の式と同等です。
CASE WHEN arg1 IS NOT NULL THEN arg1
WHEN arg2 IS NOT NULL THEN arg2
…
END
構文
COALESCE( <field name:identifier>, <field name:identifier> [, <field name:identifier> ]*)
field name
: NULL の可能性があるテキストまたはフィールド名。
例
V
というビューについて考えてみます。
a |
b |
c |
---|---|---|
10.10 |
I am some text |
21-ene-2005 0h 0m 0s |
-80.10 |
Text is $% needed always |
12-mar-2005 12h 30m 0s |
20.50 |
Text for a living |
01-feb-2006 16h 45m 0s |
40.05 |
NULL |
NULL |
例 1
SELECT COALESCE(b, 'hello')
FROM V
coalesce |
---|
I am some text |
Text is $% needed always |
Text for a living |
hello |
例 2
SELECT coalesce('hello', 'bye')
FROM v
coalesce |
---|
hello |
hello |
hello |
hello |
例 3
SELECT COALESCE(b, a)
FROM V
coalesce |
---|
I am some text |
Text is $% needed always |
Text for a living |
40.05 |
CONTEXTUALSUMMARY¶
説明
CONTEXTUALSUMMARY
関数は、テキストについて、指定された語または文を含む、関連性のあるテキストフラグメントを返します。
構文
CONTEXTUALSUMMARY( <content:text>, <keyword:text>, [ <begin delim:text>,
<end delim:text>, <fragment separator:text>, <fragment length:int>
[, <max fragments number:int> [, <analyzer:text> ] ] ] )
content
: 必須。最も関連性の高いフラグメントの抽出元のテキスト。keyword
: 必須。テキストフラグメントを抽出するために使用されるキーワード。この引数には 1 語または 1 文を内容として含めることができます。begin delim
: オプション。テキスト内に出現した場合に常にキーワードの接頭辞として追加するテキスト。デフォルト値は「」です。end delim
: オプション。テキスト内に出現した場合に常にキーワードの接尾辞として追加するテキスト。デフォルト値は「」です。fragment separator
: オプション。結果の各テキストフラグメントを区切るためのテキスト。デフォルト値は「...」です。fragment length
: オプション。テキスト内のキーワード出現箇所の前後に現われる文字のおおよその数。デフォルト値は 5 です。max fragment number
: オプション。取得するフラグメントの最大数。analyzer
: オプション。キーワードの検索に使用するアナライザー。デフォルトでは、標準アナライザー (std
) が使用されます。このアナライザーは、見出し語化やストップワードを考慮しません。Virtual DataPort には、英語用 (en
) とスペイン語用 (es
) のアナライザーが同梱されています。
例
例 1
SELECT CONTEXTUALSUMMARY(content, 'Denodo', '<b>', '</b>', ' … ', 5, 1)
FROM demo_arn_view;
このクエリは、「Denodo」という語が出現するテキスト content
のフラグメントを返します。
例 2
次のビュー text_summary_sample
について考えてみます。
text_sample |
---|
A web service (also webservice) is defined by the W3C as a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface described in a machine-processable format (specifically Web Services Description Language WSDL). Other systems interact with the web service in a manner |
prescribed by its description using SOAP messages, typically conveyed using HTTP with an XML serialization in conjunction with other web-related standards. Web services are frequently just Internet Application Programming Interfaces (API) that can be accessed over a network, such as the Internet, and executed on a remote system hosting the requested services. Other approaches with nearly the same functionality |
as web services are Object Management Group’s (OMG) Common Object Request |
Broker Architecture (CORBA), Microsoft’s Distributed Component Object Model |
(DCOM) or Sun Microsystems’s Java/Remote Method Invocation (RMI). |
SELECT contextualsummary(text_sample, 'system')
FROM text_summary_sample
contextualsummary |
---|
system |
system |
例 3
SELECT contextualsummary(text_sample, 'service')
FROM text_summary_sample
contextualsummary |
---|
service ... service |
例 4
SELECT contextualsummary(text_sample, 'web', '\', '/', '--', 25)
FROM text_summary_sample
contextualsummary |
---|
A web/ service (also-- (specifically Web/ Services-- with the web/ service |
with other web/-related |
as web/ services |
GETVAR¶
GETVAR
関数は、この関数を使用するクエリのコンテキストから変数の値を取得します。変数が存在しない場合、デフォルト値を返します。
この関数の使用方法については、「 選択条件への変数の追加 (GETVAR および SETVAR) 」を参照してください。
構文
GETVAR('<name of the variable:literal>', '<type of the variable:literal>', '<default value:literal>')
GETSESSION¶
説明
GETSESSION
関数は、Virtual DataPort サーバーとの間で確立されたセッションの情報を提供します。
構文
GETSESSION( <parameter : literal> )
parameter
には以下の いずれか を指定できます (この関数によって返される値は、このパラメータに応じて異なります)。user
: 現在のユーザーのユーザー名を返します。useragent
: 現在のコネクションに関連付けられたユーザーエージェントを返します。database
: クライアントの接続先 Virtual DataPort データベースの名前を返します。i18n
: クライアントの接続先データベースのロケール構成の名前を返します。roles
: 現在のユーザーに割り当てられている有効なロールの名前が含まれる配列を返します。有効なロールとは、ユーザーに直接的および間接的に割り当てられているロールです。たとえば、「user1」にロール「A」が割り当てられていて、ロール「A」がロール「B」に割り当てられている場合、この関数は「A」および「B」を返します。
例
SELECT GETSESSION('user') || '@' || GETSESSION('database') as user_name
FROM Dual();
user_name |
---|
user1@denodo_samples_db |
HASH¶
説明
HASH
関数は、MD5 アルゴリズムを使用して入力値のダイジェストを計算し、それを base64 (base 16 ではありません) でエンコードして返します。
この関数は、同じ入力に対しては常に同じ値を返します。
入力パラメータが NULL の場合は、NULL を返します。
構文
HASH( <value:text> ):text
value
: 必須。フィールドまたはリテラルの名前。
例
SELECT hash('text value') as hash_value, hash(null) as null_value
FROM Dual()
hash_value |
null_value |
---|---|
eNV9lLZhJ1lex1ztvwnajg== |
NULL |
IS_PROJECTED_FIELD¶
説明
IS_PROJECTED_FIELD
関数は、パラメータとして渡されたフィールドが投影されている場合 (つまり、フィールドがクエリの SELECT
ステートメント内にある場合)、 true
を返します。それ以外の場合は False
を返します。
注釈
この関数は廃止されており、Denodo Platform の次のメジャーバージョンで削除されます。
廃止されているすべての機能のリストについては、「 Denodo Platform 8.0 で非推奨となった機能 」を参照してください。
構文
IS_PROJECTED_FIELD( <field name:literal> ):boolean
field name
: 必須。フィールドの名前。大文字と小文字の違いを含め完全に一致する名前である必要があります。このパラメータが NULL の場合、この関数はfalse
を返します。
例
次のビュー items
について考えてみます。
item |
price |
---|---|
A |
3.45 |
B |
9.99 |
C |
4.99 |
例 1
SELECT item, IS_PROJECTED_FIELD('item')
FROM items
item |
is_projected_field |
---|---|
A |
true |
B |
true |
C |
true |
例 2
SELECT sum(price) AS total, IS_PROJECTED_FIELD('price')
FROM items
total |
is_projected_field |
---|---|
18.43 |
true |
この例では、クエリによってフィールド price
に関数が適用されていますが、このフィールドが投影されているため、 IS_PROJECTED_FIELD
は true
を返します。
例 3
SELECT item, IS_PROJECTED_FIELD('price')
FROM items
item |
is_projected_field |
---|---|
A |
false |
B |
false |
C |
false |
この例では、クエリはフィールド price
を投影していないため、 IS_PROJECTED_FIELD
は false
を返します。
例 4
SELECT item AS field1, IS_PROJECTED_FIELD('field1')
FROM items
field1 |
is_projected_field |
---|---|
A |
false |
B |
false |
C |
false |
この例では、 IS_PROJECTED_FIELD
は、フィールドの別名ではなく、ビューのフィールドが投影されているかどうかをチェックするので、 false
を返します。
MAP¶
説明
MAP
関数は、キーに関連付けられた値を返します。キー/値のペアはビューまたはマップから取得できます (「 マップの定義 」を参照)。キーが存在しない場合、この関数は NULL
を返します。
使用可能なシグネチャは 2 つあります。
構文 1
MAP ( <key:text>, <view name:text>, <key field:text>,
<value field:text> )
キーに関連付けられた値を取得します。MAP はビューの列でキーの値を検索します。
key
: 必須。ビューで検索する値。view name
: 必須。キーとその値を含むビューの名前。key field
: 必須。キーを含むビューの列。value field
: 必須。値を含むビューの列。
構文 2
MAP ( <key:text>, <map name:text> [, <i18n:text> ] )
マップからキーに関連付けられた値を取得します。
key
: 必須。マップで検索する値。map name
: 必須。キーとその値を含むマップの名前。i18n
: オプション。コンテンツのロケール構成。
注釈
どちらの場合も、 key
は大文字と小文字が区別されるパラメータです。
例
例 1
food
というマップについて考えてみます。
CREATE MAP SIMPLE food (
'breakfast' = 'milk'
'dinner' = 'lettuce'
'lunch' = 'meat'
)
SELECT MAP('breakfast', 'food') AS breakfast
, MAP('lunch', 'food') AS lunch
, MAP('dinner', 'food') AS dinner
, MAP('none', 'food') AS none
FROM Dual()
breakfast |
lunch |
dinner |
none |
---|---|---|---|
milk |
meat |
lettuce |
NULL |
例 2
各国の会社の収益がその国の通貨で含まれる FOREIGN_SALES
というビューについて考えてみます。
country |
month |
revenue |
currency |
---|---|---|---|
Mexico |
JAN |
7536.00 |
MXN |
Spain |
JAN |
20000.00 |
EUR |
United Kingdom |
JAN |
26816.00 |
GBP |
Canada |
FEB |
-25616.00 |
CAD |
Japan |
FEB |
100024.00 |
JPY |
さらに、各通貨とドルの為替レートを含む CURRENCY_RATES_TO_USD
というマップについて考えてみます。
CREATE MAP SIMPLE currency_rates_to_usd (
'CAD' = '0.957121'
'EUR' = '1.4971'
'GBP' = '1.67'
'JPY' = '0.011166'
'MXN' = '0.076989'
'USD' = '1.0'
);
SELECT month
, country
, CAST('float', MAP(CURRENCY, 'currency_rates_to_usd')) * revenue AS revenue_usd
FROM foreign_sales
month |
country |
revenue_usd |
---|---|---|
JAN |
Mexico |
580.19 |
JAN |
Spain |
29942.00 |
JAN |
United Kingdom |
44782.72 |
FEB |
Canada |
-24517.61 |
FEB |
Japan |
1116.87 |
NULLIF¶
説明
NULLIF
関数は、2 つの値または式を比較して、2 つが等しければ NULL
を返し、そうでなければ最初の値を返します。
この関数は、次のステートメントと同等です。
CASE WHEN <expression> = <expression>
THEN NULL
ELSE <expression>
END
NULLIF
は暗黙的な型変換を実行します。つまり、2 つのパラメータが異なる型の場合、比較のために一方の型変換を試みます
。
例: 最初のパラメータが 1
(text
)、2 番目のパラメータが 1
(integer
) の場合、 text
パラメータを整数に変換します。これらは型が異なっていても等しいとみなされます。
構文
NULLIF(<expression>, <expression>)
例
internet_inc
というビューについて考えてみます。
id |
summary |
ttime |
taxid |
---|---|---|---|
1 |
Error in ADSL router |
2005-06-29 19:19:41.0 |
B78596011 |
2 |
Incident in ADSL router |
2005-06-29 19:19:41.0 |
B78596012 |
3 |
Install additional line |
2005-06-29 19:19:41.0 |
B78596013 |
4 |
Bandwidth increase |
2005-06-29 19:19:41.0 |
B78596014 |
例 1
SELECT NULLIF(id, 1) AS display
FROM internet_inc
display |
---|
NULL |
2 |
3 |
4 |
例 2
SELECT *
FROM internet_inc
WHERE NULLIF(ID, 1) <> NULL
id |
summary |
ttime |
taxid |
---|---|---|---|
2 |
Incident in ADSL router |
2005-06-29 19:19:41.0 |
B78596012 |
3 |
Install additional line |
2005-06-29 19:19:41.0 |
B78596013 |
4 |
Bandwidth increase |
2005-06-29 19:19:41.0 |
B78596014 |
このビューの最初の行は条件に一致しません。
例 3
SELECT COALESCE(NULLIF(ID, '1'), summary) AS display
FROM internet_inc
display |
---|
Error in ADSL router |
2 |
3 |
4 |
注釈
NULLIF
は 2 番目のパラメータを自動的に整数に変換し、それを同じく整数である ID 列の値と比較します。
ROWNUM¶
説明
ROWNUM
関数は、クエリの結果の各行に対して一意の数値を返します。
この数値は、データが異なるソースから取得されていても、各クエリで一意です。
ORDER BY
句は、 ROWNUM
が各行に値を割り当てた後に処理されます。
1 つのクエリを何度実行しても一貫した結果が得られるようにするには、ビューに対して ROWNUM()
を ORDER BY
句とともに使用します。
構文
ROWNUM( [ <offset:long > ] ):long
offset
: オプション。指定されている場合、ROWNUM
によって返される最初の値は1
ではなく、(offset + 1
) です。
例
internet_inc
というビューについて考えてみます。
id |
summary |
ttime |
taxid |
---|---|---|---|
1 |
Error in ADSL router |
2005-06-29 19:19:41.0 |
B78596011 |
2 |
Incident in ADSL router |
2005-06-29 19:19:41.0 |
B78596012 |
3 |
Install additional line |
2005-06-29 19:19:41.0 |
B78596013 |
4 |
Bandwidth increase |
2005-06-29 19:19:41.0 |
B78596014 |
例 1
SELECT rownum(10), summary, taxid
FROM internet_inc
rownum |
summary |
taxid |
---|---|---|
11 |
Error in ADSL router |
B78596011 |
12 |
Incident in ADSL router |
B78596012 |
13 |
Install additional line |
B78596013 |
14 |
Bandwidth increase |
B78596014 |
例 2
SELECT ROWNUM(), summary, taxid
FROM internet_inc
ORDER BY summary
rownum |
summary |
taxid |
---|---|---|
4 |
Bandwidth increase |
B78596014 |
1 |
Error in ADSL router |
B78596011 |
2 |
Incident in ADSL router |
B78596012 |
3 |
Install additional line |
B78596013 |
「例 2」のクエリでは、結果をフィールド summary
で並べ替えている点に注意してください。 ORDER BY
句は ROWNUM
関数が各行に値を割り当てた後に処理されるため、 ROWNUM
の最初の値は 1
にはなりません。