型変換関数

型変換関数は、値の型を変換します。

Virtual DataPort でサポートされている型変換関数

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

ITPilot

Web Integration

3

three

Web Automation

4

four

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)}

ITPilot

{Web Integration,(3,three) - Web Automation,(4,four)}

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 -| ]

ITPilot

[ Web Integration, |- 3, three -|, Web Automation, |- 4, four -| ]

Scheduler

[ Job Scheduling, |- 5, five -| ]

CAST

説明

CAST 関数は、データのデータ型を変換します。

構文 1

CAST( <vdp data type:text>, <value:expression> )
  • vdp data type: 必須。値の変換先のデータ型。この値は Virtual DataPort の型の名前です。

  • value: 必須。変換する値。

次の表に、使用できる型変換を示します。「出力の型」の列には、パラメーター vdp data type に指定できる値が含まれます。

CAST 関数で使用できる型変換

入力値の型 (パラメーター value の型)

出力の型

array

array

boolean

int

text、blob

blob

text、int、long、float、double、boolean

boolean

text、date (非推奨)、localdate、timestamp、timestamptz、time、long

date (非推奨)

text、date (非推奨)、localdate、timestamp、timestamptz、long

localdate

text、date (非推奨)、localdate、timestamp、timestamptz、time、long

timestamp

text、date (非推奨)、localdate、timestamp、timestamptz、time、long

timestamptz

text、date (非推奨)、timestamp、timestamptz、time、long

time

text、int、long、float、double

double

text、int、long、float、double

float

text、int、long、float、double

decimal

text、int、long、float、double

int

text、int、long、float、double

long

xml、register

register

text、int、long、float、double、boolean、date (非推奨)、localdate、timestamp、timestamptz、time、xml、blob、register、array

text

text、blob、xml、register、array

xml

構文 2

CAST( <value:expression> AS <SQL type:text> )
  • value: 必須。変換する値。

  • SQL type: 必須。値の変換先の ANSI SQL 型の名前。

ANSI SQL 型から Virtual DataPort 型への型変換

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 関数は、値をテキストに変換する際に出力を切り詰めます。

  1. ターゲットのデータ型に SQL 型と長さを指定している。例: VARCHAR(20)

  2. かつ、この長さが入力値の長さより短い。

たとえば、 CAST ('Denodo' AS VARCHAR(2)) は、ターゲットの型で入力値の長さよりも短い長さを指定しているため、「De」を返します。

注意 2

booleaninteger に型変換する場合、 true1 に、 false0 にマッピングされます。

例 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 } }