変換関数¶
変換関数は、あるデータ型の値を別のデータ型に変換します。
次の関数が変換関数です。
ARRAY_TO_STRING¶
説明
ARRAY_TO_STRING
関数は、配列フィールドを、特定の文字で区切られた配列のエレメントを含む文字列に変換します。
この関数には 2 つのシグネチャがあります。最初のシグネチャでは、配列を中括弧で囲み (「{」と「}」)、配列に他の配列が含まれる場合は、それらも中括弧で囲みます。配列にレジスターが含まれる場合は、それらを括弧で囲みます (「(」と「)」)。
2 番目のシグネチャでは、ユーザーが配列および内部のレジスターと配列を囲む文字を指定できます。
構文
ARRAY_TO_STRING( <separator:text>, <array value:array> ):text
ARRAY_TO_STRING( <separator:text>, <array begin delimiter:text>,
<array end delimiter:text>, <register begin delimiter:text>,
<register end delimiter:text>, <array value:array> ):text
separator
: 配列のエレメントを区切る文字。array begin delimiter
: 配列とその内部の配列の前に配置する文字。array end delimiter
: 配列とその内部の配列の後に配置する文字。register begin delimiter
: 内部のレジスターフィールドの前に配置する文字。register end delimiter
: 内部のレジスターフィールドの後に配置する文字。
例
name
および info
という 2 つのフィールドがあるビュー V
について考えてみます。 info
はレジスターの配列で、サブフィールド message
および register_sample
を持ちます。 register_sample
はレジスター型のフィールドで、2 つのサブフィールド key
および value
を持ちます。
name |
info |
||
---|---|---|---|
message |
register_sample |
||
key |
value |
||
Virtual DataPort |
Virtual Data Access Layer |
1 |
one |
Data Federation |
2 |
two |
|
Scheduler |
Job Scheduling |
5 |
five |
例 1
SELECT name, ARRAY_TO_STRING(' - ', info)
FROM V
name |
array_to_string |
---|---|
Virtual DataPort |
{Virtual Data Access Layer,(1,one) - Data Federation,(2,two)} |
Scheduler |
{Job Scheduling,(5,five)} |
例 2
SELECT name, ARRAY_TO_STRING(', ', ' [ ', ' ] ', ' |- ', ' -|', info)
FROM V
name |
array_to_string |
---|---|
Virtual DataPort |
[ Virtual Data Access Layer, |- 1, one -|, Data Federation, |- 2, two -| ] |
Scheduler |
[ Job Scheduling, |- 5, five -| ] |
CAST¶
説明
CAST
関数は、データのデータ型を変換します。
構文 1
CAST( <vdp data type:text>, <value:expression> )
vdp data type
: 必須。値の変換先のデータ型。この値は Virtual DataPort の型の名前です。value
: 必須。変換する値。
次の表に、使用できる型変換を示します。「出力の型」の列には、パラメータ vdp data type
に指定できる値が含まれます。
入力値の型 (パラメータ value の型) |
出力の型 (入力値の型に応じて |
---|---|
array |
array |
text、blob |
blob |
text、int、long、float、double、boolean |
boolean |
text、date (非推奨)、localdate、timestamp、timestamptz、time、long |
date (非推奨) |
text、int、long、float、double |
decimal |
text、int、long、float、double |
double |
text、int、long、float、double |
float |
text、int、long、float、double、boolean |
int |
text、date (非推奨)、localdate、timestamp、timestamptz、long |
localdate |
text、int、long、float、double |
long |
xml、register |
register |
array、blob、boolean、decimal、double、float、int、localdate、long、register、text、time、timestamp、timestamptz、xml、date (非推奨) |
text |
text、date (非推奨)、timestamp、timestamptz、time、long |
time |
text、date (非推奨)、localdate、timestamp、timestamptz、time、long |
timestamp |
text、date (非推奨)、localdate、timestamp、timestamptz、time、long |
timestamptz |
text、blob、xml、register、array |
xml |
boolean
値を integer に型変換する場合、 true
には 1
が、 false
には 0
が返されます。
構文 2
CAST( <value:expression> AS <SQL type:text> )
value
: 必須。変換する値。SQL type
: 必須。値の変換先の ANSI SQL 型の名前。
SQL 型 |
Virtual DataPort 型 |
---|---|
BIT (n) |
blob |
BIT VARYING (n) |
blob |
BOOL |
boolean |
BYTEA |
blob |
CHAR (n) |
text |
CHARACTER (n) |
text |
CHARACTER VARYING (n) |
text |
DATE |
localdate |
DECIMAL |
double |
DECIMAL (n) |
double |
DECIMAL (n, m) |
double |
DOUBLE PRECISION |
double |
FLOAT |
float |
FLOAT4 |
float |
FLOAT8 |
double |
INT2 |
int |
INT4 |
int |
INT8 |
long |
INTEGER |
int |
NCHAR (n) |
text |
NUMERIC |
double |
NUMERIC (n) |
double |
NUMERIC (n, m) |
double |
NVARCHAR (n) |
text |
REAL |
float |
SMALLINT |
int |
TEXT |
text |
TIMESTAMP |
timestamp |
TIMESTAMP WITH TIME ZONE |
timestamptz |
TIMESTAMPTZ |
timestamptz |
TIME |
time |
TIMETZ |
time |
VARBIT |
blob |
VARCHAR |
text |
VARCHAR ( MAX ) |
text |
VARCHAR (n) |
text |
注意
注意 1
以下の 2 つの条件を満たしている場合、 CAST
関数は、値をテキストに変換する際に出力を切り詰めます。
ターゲットのデータ型に SQL 型と長さを指定している。例:
VARCHAR(20)
。かつ、この長さが入力値の長さより短い。
たとえば、 CAST ('Denodo' AS VARCHAR(2))
は、ターゲットの型で入力値の長さよりも短い長さを指定しているため、「De」を返します。
注意 2
boolean
を integer
に型変換する場合、 true
は 1
に、 false
は 0
にマッピングされます。
例
例 1
SELECT CAST('blob', 'hello') AS text_to_blob_cast
, CAST('boolean', 'true') AS text_to_boolean_cast
, CAST('boolean', 500000) AS long_to_boolean_cast
, CAST('boolean', 0) AS long_to_boolean_cast_Zero
, CAST('double', 5 + 5) AS int_to_double_cast
FROM Dual();
text_to_ blob_cast |
text_to_ boolean_cast |
long_to_ boolean_cast |
long_to_ boolean_cast |
int_to_ double_cast |
---|---|---|---|---|
[BINARY DATA] - 5 bytes |
true |
true |
false |
10.0 |
例 2
register
型の列 register_sample
があるビュー V
について考えてみます。このレジスターには array
型のフィールド STR
があります。
register_sample |
||
---|---|---|
str |
r1 |
r2 |
hello | world |
3 |
3.70 |
SELECT CAST('xml', register_sample)
FROM V
<?xml version="1.0" encoding="UTF-8"?>
<register>
<R1>9</R1>
<R2>1.1</R2>
<STR>another string</STR>
<STR>last string here</STR>
</register>
例 3
array
型の列 array_sample
があるビュー V
について考えてみます。配列 array_sample
には、その中に別の配列が含まれます。
array_sample |
|||
---|---|---|---|
str |
r1 |
r2 |
|
denodo |
platform |
40 |
52.0 |
enterprise |
data | virtualization |
60 |
72.0 |
SELECT CAST('xml', array_sample)
FROM V
<?xml version="1.0" encoding="UTF-8"?>
<array>
<item>
<R1>40</R1>
<R2>52.0</R2>
<STR>denodo</STR>
<STR>platform</STR>
</item>
<item>
<R1>60</R1>
<R2>72.0</R2>
<STR>enterprise</STR>
<STR>data</STR>
<STR>virtualization</STR>
</item>
</array>
例 4
SELECT
CAST('hello' AS BIT VARYING(20)) AS text_to_blob_cast
, CAST(5+5 AS VARCHAR(1)) AS int_to_text_cast
, CAST('10' AS numeric) AS text_to_int_cast
FROM Dual();
text_to_blob_ cast |
int_to_text_ cast |
text_to_int_ cast |
---|---|---|
[BINARY DATA] - 5 bytes |
1 |
10.0 |
2 番目の列の値は「10」 (5+5) から「1」に切り詰められています。その理由は、 CAST
関数で指定された SQL 型 (VARCHAR(1)
) の最大長が 1 であるからです。 CAST(5+5 AS VARCHAR(2))
であれば、2 番目の列の値は「10」になります。
CREATETYPEFROMXML¶
説明
CREATETYPEFROMXML
関数は、XML データから register 型または array 型を作成します。型が正しく作成された場合は、新しい型の名前を返します。
この関数は通常、 CAST
と一緒に使用します。使用方法については、「 Virtual DataPort 複合型への XML データの変換 」を参照してください。
注釈
この関数は非推奨になっており、Denodo Platform の将来のバージョンで削除される可能性があります。代わりに、型のルートを持つ XML データソースを 変数から 作成し、その XML ドキュメントをこのデータソースに渡してください。
構文
CREATETYPEFROMXML( <new type name:text>, <xml value:{xml|text}> ):text
new type name
: 必須。新しい型の名前。xml value
: 必須。新しい型を作成するためにテンプレートとして使用する XML サンプル。値の型は xml または text です。
例
例 1
新しい register 型を作成します。
SELECT CREATETYPEFROMXML('bookstore_xml_type',
'<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>') FROM Dual();
例 2
新しい array 型を作成します。
SELECT CREATETYPEFROMXML('title_type',
'<titles>
<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>
</titles>') FROM Dual();
REGISTER¶
説明
REGISTER
関数は、ビューのフィールドの値を含むレジスターを作成します。
構文
REGISTER( <field name:any type> [, <field name:any type> ]*):register
field name
: フィールドの名前。
例
ビュー V
について考えてみます。
int_sample |
text_sample |
register_sample |
---|---|---|
1 |
A |
Register { hello , how're you } |
1 |
B |
Register { hello, good bye } |
2 |
C |
Register { another string, last string } |
SELECT REGISTER(int_sample, text_sample, register_sample) AS register_sample
FROM V;
register_sample |
---|
Register { 1, A, Register { hello , how're you } } |
Register { 1, B, Register { hello, good bye } } |
Register { 2, C, Register { another string, last string } } |