ヘッダーをスキップ
Oracle® OLAP DMLリファレンス
11gリリース2 (11.2)
B61346-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

CONVERT

CONVERTファンクションは、値をあるデータ型から別のデータ型へ変換するファンクションです。

戻り値

戻り値は、type引数の値によって異なります。

構文

CONVERT(expressiontype [argument...])

パラメータ

expression

変換する対象の式または変数。

type

expressionの変換後のデータ型。データ型を表すキーワードについては、表7-3「CONVERTファンクションのtypeパラメータのキーワード」で説明します。

表7-3 CONVERTファンクションのtypeパラメータのキーワード

キーワード 説明

BINARY

Oracle標準データ型への変換を示すものではないが、付加的な変換機能を提供。BINARYは変換を行わない。データ型にかかわりなく、すべての値の内部表現はテキスト値として返される。

  • TEXTデータ型では、結果は値それ自体となるため可変長。

  • IDおよびDECIMALデータ型では、結果は8バイト長。ID値は必要に応じて空白で埋められる。

  • BOOLEANまたはINTEGERデータ型では、デフォルトの結果はそれぞれ2または4バイト長(幅をわずかに変更するための追加引数については、argumentの説明を参照)。

  • それ以外のデータ型では、結果は4バイト長。

「PACKEDおよびBINARY変換」を参照。

BOOLEAN

Oracle OLAP BOOLEANデータ型への変換。

BYTE

単一文字を0から255の範囲のASCIIのINTEGER値に変換する。または、この範囲のINTEGERを文字に変換する。この範囲外のINTEGERはmodulo 256とみなされて変換され、つまり、残りが256より小さくなるまでINTEGERから256が減算され、範囲内に収まった残余分が文字に変換される。

DATE

Oracle OLAP DATEデータ型への変換。

DATETIME

Oracle OLAP DATETIMEデータ型への変換。

DECIMAL

Oracle OLAP DECIMALデータ型への変換。

DSINTERVAL

Oracle OLAP DML DSINTERVALデータ型への変換。

ID

Oracle OLAP IDデータ型への変換。

INFILE

IDTEXTDATEまたはRELATIONの値を一重引用符で囲み、INFILE文で読み取れるようにする。したがって、expressionには、IDTEXTDATEまたはRELATIONのいずれかの値が必要。英数字で等価なものがないTEXT値の場合、それらの値は正しいエスケープ・シーケンスに変換される。

INTEGER

Oracle OLAP INTEGERデータ型への変換。

LONGINTEGER

Oracle OLAP LONGINTEGERデータ型への変換。

NTEXT

Oracle OLAP標準データ型への変換。NCHARおよびNVARCHAR2 SQLデータ型に対応。NTEXT文字はUTF8 Unicodeでエンコードされる。この文字コードは、データベースのNCHARキャラクタ・セットの場合(UTF16など)とは異なる可能性あり。NTEXTからTEXTへの変換では、NTEXT値がデータベース・キャラクタ・セットで表せない場合、データの損失をまねくことがある。

NUMBER [(p,[s])]

Oracle OLAP NUMBERデータ型への変換。

PACKED

数値を10進値に変換してから、パック形式(15桁およびプラス記号またはマイナス記号を含む8バイト長のテキスト値)に変換。小数部はパック形式の数字には表せないため、変換処理により小数は直近のINTEGERに丸められる。「PACKEDおよびBINARY変換」を参照。

ROWID

テキスト値からROWID値への変換。

SHORTDECIMAL

Oracle OLAP SHORTDECIMALデータ型への変換。

SHORTINTEGER

Oracle OLAP SHORTINTEGERデータ型への変換。

TEXT

Oracle OLAP標準データ型への変換。SQLのCHARおよびVARCHAR2データ型に相当。TEXT文字はデータベース・キャラクタ・セットでエンコードされる。

TIMESTAMP

Oracle OLAP DML TIMESTAMPデータ型への変換。

TIMESTAMP_LTZ

Oracle OLAP DML TIMESTAMP_LTZデータ型への変換。

TIMESTAMP_TZ

Oracle OLAP DML TIMESTAMP_TZデータ型への変換。

UROWID

テキスト値からUROWID値への変換。

YMINTERVAL

Oracle OLAP DML YMINTERVALデータ型への変換。


argument

typeにTEXT、NTEXT、ID、DATEまたはINFILEを指定する場合は、追加引数を指定して変換の方法を決定できます。これを、表7-4「TEXT、NTEXT、ID、DATEおよびINFILEの変換方法を指定する構文」にまとめます。

表7-4 TEXT、NTEXT、ID、DATEおよびINFILEの変換方法を指定する構文

type引数のキーワード 変換前の値 すべてのパラメータの構文

TEXT

任意の数値

TEXT [decimal-int|DECIMALS [comma-bool|COMMAS [paren-bool|PARENS]]]

NTEXT

任意の数値

NTEXT [decimal-int|DECIMALS [comma-bool|COMMAS [paren-bool|PARENS]]]

ID

任意の数値

ID [decimal-int|DECIMALS]

TEXT、NTEXTまたはID

任意の日時

ID|TEXT|NTEXT ['date_format']

TEXT、NTEXTまたはID

DATE

ID|TEXT|NTEXT ['dateformat']

VNFを持つDAY、WEEK、MONTH、QUARTER、YEAR型のディメンションのIDまたはTEXT

DATE

ID [dwmqy-dimension]|TEXT [dwmqy-dimension|'vnf ']

DATE

TEXT、NTEXTまたはID

DATE [date-order|dwmqy-dimname]

NTEXT

TEXT

NOXLATE

TEXT

NTEXT

NOXLATE

INFILE


INFILE [width-exp|LSIZE [escape-int|0]]

BOOLEANまたはINTEGERを持つBINARY


BINARY [width-exp]


decimal-int

数値データをTEXTまたはID値に変換する際に使用される小数点以下の桁数を制御するINTEGER式。この引数を指定しない場合、CONVERTではDECIMALSオプションの現行の値(デフォルトは2)を使用します。

comma-bool

数値データのテキスト表現でカンマを使用して3桁を区切るかどうかを決定するブール式。式の値をYESに設定すると、カンマが使用されます。この引数を指定しない場合、CONVERTではCOMMASオプションの現行の値(デフォルトはYES)を使用します。

paren-bool

数値データのテキスト表現で負の値をカッコで囲むかどうかを決定するブール式。式の値をYESに設定すると、カッコが使用され、NOに設定すると、負の値の前にマイナス記号が付きます。この引数を指定しない場合、CONVERTではPARENSオプションの現行の値(デフォルトはNO)を使用します。

date_format

日時式をテキストに変換する際に使用するテンプレートを指定するテキスト式。各データ・フィールドの有効な書式は、DATE_FORMATコマンドを使用して指定できる書式と同じです。

date_format引数を含めない場合、結果の書式はセッションのデフォルトの日付書式によって決まります。詳細は、「デフォルトの日時書式テンプレート」を参照してください。

dateformat

日付のみの式をテキストに変換する際に使用するテンプレートを指定するテキスト式。テンプレートには、日付の4つの構成要素(日、月、年、曜日)についての書式指定を含めることができます。テンプレート内の各構成要素は、左の山カッコ(<)と右の山カッコ(>)で囲む必要があります。構成要素の前後または構成要素間には、別のテキストを入れることが可能です。

日付の各構成要素についての有効な書式は、DATEFORMATオプションで許可されている書式と同じです。

次の文では、CONVERTは今日の日付をdateformat引数で指定されている書式でのテキスト値として返します。

SHOW CONVERT(TODAY TEXT '<MM>-<DD>-<YY>')

この例では、今日の日付は1998年3月31日です。SHOW文は、この日付を次のように表示します。

03-31-98

dateformat引数を含めない場合、結果の書式はDATEFORMATオプションの現行の設定により決定されます。

dwmqy-dimension

DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの名前。Oracle OLAPでは、日付のみの値をTEXTまたはID値に変換する際、dwmqy-dimensionVNFを使用します。dwmqy-dimensionのVNFが指定されていない場合は、デフォルトのVNFが使用されます。

次の文では、CONVERTは今日の日付を、YEARディメンションのVNFで指定されている書式でのテキスト値として返します。

show convert(today text year)

この例では、今日の日付は1998年3月31日です。SHOW文は、この日付を次のように表示します。

YR98
vnf

DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの値をテキストに変換する際に使用する値名書式を指定する、テキスト・テンプレート。テンプレートには、時間間隔の構成要素の書式指定を含めることができます。時間間隔の構成要素には、日付の全構成要素(日、月、年、曜日)と、会計年度および会計期間の構成要素が含まれます。また、テンプレートには、構成要素として、DAY、WEEK、MONTH、QUARTERまたはYEARディメンションの名前も含められます。テンプレート内の各構成要素は、左の山カッコと右の山カッコで囲む必要があります。構成要素の前後または構成要素間には、別のテキストを入れることが可能です。

CONVERTファンクションに対するvnf引数は、VNFコマンド内のテンプレートと似ています。ただし、VNFコマンド・テンプレートでは入力の解釈を厳密かつ明白に設計する必要があるのに対し、vnf引数はそれほどの制約はありません。したがって、vnf引数で使用できる書式スタイルは、VNFコマンド・テンプレートで許可されるものよりも広範です。

vnf引数で有効な書式スタイルには、VNFコマンド・テンプレートで許可されるすべての書式スタイルに加え、DATEFORMATテンプレートで許可されるすべての書式スタイルが含まれます。DATEFORMATでは、VNFコマンド・テンプレートでは許可されない次のような書式スタイルを提供しますが、これらは、CONVERTファンクションへのvnf引数では有効です。

  • 日付の序数スタイル(DT、DTL)

  • 月のfirst-letterスタイル(MT)

  • 曜日のスタイル(W、WT、WTXT、WTXTL、WTEXT、WTEXTL)

その期間の最後の日または月ではなく、最初の日または月を表示するように指定するには、これらの書式にBコードを追加します。

DAY、WEEK、MONTH、QUARTERまたはYEAR型のどのディメンションに対しても、VNFおよびDATEFORMATの両書式スタイルを任意の組合せで使用できます。この構文は、ディメンションの各型に対し特定の書式組合せしか有効でないVNFコマンドのテンプレートと対照的です。

次の文では、CONVERTはMONTHディメンションの現行の値を、vnf引数で指定されている書式でのテキスト値として返します。

SHOW CONVERT(month TEXT '<MTEXTL>, <YYYY>')

この例では、ステータスにある最初のMONTH値はDEC97で、SHOW文はこれを次のように表示します。

December, 1997

vnf引数を含めない場合は、結果の書式は、変換する値が属するディメンションのVNFにより決定されます。ディメンションにVNFがない場合には、変換するディメンションの型のデフォルトVNFに基づく書式が使用されます。

date-order

テキスト値の構成要素(月、日、年)の順序があいまいな場合に、指定されたテキスト値を日付のみの値として解釈する方法を指定するテキスト式。式は、'MDY''DMY''YMD''YDM''MYD''DYM'のいずれかです。各文字は、日付の構成要素(Mは月、Dは日、Yは年)を表します。

date-orderまたはdwmqy-dimname引数を含めない場合には、テキスト式内の解釈のあいまいな点は、DATEORDERオプションの現行の設定によって解決されます。日付のみの値の完全な説明とその解釈方法については、DATEORDERオプションを参照してください。

dwmqy-dimname

テキスト値の構成要素の順序があいまいな場合に、指定されたテキスト値を日付のみの値として解釈する方法の決定に使用するVNFまたはデフォルト日付順序を持つ、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの名前。

date-orderまたはdwmqy-dimname引数を含めない場合には、テキスト式内の解釈のあいまいな点は、DATEORDERオプションの現行の設定によって解決されます。日付のみの値の完全な説明とその解釈方法については、DATEORDERオプションを参照してください。

width-exp

CONVERTからの出力の幅を指定するINTEGER式。最小幅は7です。デフォルトの幅は、LSIZEオプションの現行の値です。escape-int引数を指定している場合、この引数は必須です。

escape-int

出力にエスケープ・シーケンスを使用するかどうかを指定します。この引数には、表7-5「CONVERTのescape-intパラメータの値」に示されている値を指定できます。

表7-5 CONVERTのescape-intパラメータの値

説明

-1

エスケープを使用しない。先行するWIDTH引数から1が減算されないように、-1の前にカンマが付く(,-1)。

0

(デフォルト)印刷不可の文字にエスケープを使用する。

1

すべての文字にエスケープを使用する。


OLAP DMLにおけるエスケープ・シーケンスの詳細は、「エスケープ・シーケンス」を参照してください。

width-exp

変換後の結果の幅を制御するINTEGER式。12または4バイトを評価できます。デフォルトの幅は、BOOLEANでは2INTEGERでは4です。INTEGER値が大きすぎて指定された幅に収まらない場合は、NAが返されます。幅が無効または他のデータ型について指定されている場合は、エラーが発生します。

NOXLATE

キャラクタ・セット変換の実行を禁止することを示すキーワード。Oracle OLAPでは、かわりに、変換後の値にターゲット・データ型のタグのみを付け、データはCONVERTファンクションがコールされる前の状態のまま維持します。このキーワードは、TEXTまたはNTEXT変数にバイナリ・データを保存するために必要な場合のみ使用してください。

使用上の注意

INFILE変換

1行の最大文字数は4,000です。4,000文字を超える行を生成するINFILE変換を試行すると、エラーが発生します。ソース行が99文字を超えており、それらのうち相当数がエスケープ・シーケンスを必要とする場合、このタイプのエラーが発生する可能性があります。

日付のみの値の数値への変換

日付のみのデータ型の値を数値データ型の値に変換すると、その結果は日付を表す順序番号になります(順序番号1は1900年1月1日を表します)。

Oracle OLAPではまず、日付のみの値は、それに対応する順序番号のINTEGER値として変換されます。ターゲット・データ型がINTEGER以外の数値データ型である場合はさらに、そのINTEGER値が、指定された数値データ型に変換されます。

SHORTINTEGER値が取り得る最大値は32,767で、(INTEGER値としては)1992年9月17日を表します。したがって、この日付以降の日付のみの値をSHORTINTEGER値に変換しようとすると、CONVERTによりNAが返されます。

数値の日付のみの値への変換

結果は、指定した数値と等しい順序番号に対応する日付のみの値(1900年1月1日が順序番号1に対応)となりますが、結果が有効な日付の範囲にない場合はNA値となります。有効な日付範囲は、1900年1月1日(順序番号1)から9999年12月31日(順序番号2,958,464)までです。

数値データ型がINTEGERデータ型の場合、そのINTEGER値は、指定した数値と等しい順序番号に対応する日付のみの値に直接変換されます。数値データ型がINTEGERでない場合、その値はまずINTEGER値に変換され、さらにそのINTEGER値が日付のみの値に変換されます。

日付のみのディメンション値のID値への変換

変換の結果が8文字を超える場合、その結果は切り捨てられます。

リレーション値のINTEGER値への変換

変換の結果は、リレーションのディメンションにおけるその値の位置を表すINTEGER値となります。この動作は、リレーションの値がディメンション値であり、TEXT値ではないことによります。

数値データ型から他のデータ型への値の変換

変換の結果は、指定したデータ型の値になります。ただし、ターゲット・データ型に対して有効な値の範囲にない場合はNAとなります。

たとえば、32,767より大きいINTEGER値または-32,767より小さいINTEGER値をSHORTINTEGER値に変換しようとすると、CONVERTからはNAが返されます。

文字列から日時への変換ルール

文字列値を日時値に変換する際には、次の書式設定のルールが適用されます。

  • 先行ゼロを含む数値書式要素の桁がすべて指定されている場合は、日時文字列の書式文字列に含まれる句読点を省略できます。たとえば、MM、DD、YYなどの2桁の書式要素で、2ではなく02を指定する場合です。

  • 日時文字列の書式文字列で最後にある時刻フィールドを省略できます。

  • 日時書式要素と日付文字列内の対応する文字の一致に失敗した場合、かわりの書式要素が適用されます(表7-6「Oracleの書式一致」を参照)。

表7-6 Oracleの書式一致

元の書式要素 元の書式要素のかわりに使用される書式要素
'MM'

'MON'および'MONTH'

'MON

'MONTH'

'MONTH'

'MON'

'YY'

'YYYY'

'RR'

'RRRR'


NULL値および空白テキスト値のバイト値への変換

CONVERTでは、NULL文字列('')と空白文字列(' ')に対しては同じ値を返します。どちらも、変換の結果は32です。

PACKEDおよびBINARY変換

PACKEDおよびBINARY型は、PACKEDおよびBINARYのデータを含むバイナリ・ファイルを作成するのに役立ちます。そのようなファイルを作成するには、BINARYキーワードとともにFILEOPEN文を使用してファイルを開き、FILEPUTを使用して値を書き込みます。FILEPUT文の引数としてROWファンクションを使用することで、ファイルの形式を設定できます。

例7-49 10進値のテキストへの変換

この例では、JOINCHARSとCONVERTファンクションを使用して、製品および月について一定のテキストを変数priceの値と結び付け、価格を小数点以下の桁なしで表す方法を示します。

LIMIT month TO 'Jul96'
LIMIT product to 'Canoes'
SHOW JOINCHARS('Price of Canoes = $' CONVERT(price TEXT 0))
Price of Canoes = $200

例7-50 テキスト値のエスケープ・シーケンスへの変換

この例では、CONVERTファンクションをESCAPEBASEオプションとともに使用して、TEXT値を、デフォルトの10進エスケープ・シーケンスから16進エスケープ・シーケンスへ変換する方法を示します。

DEFINE textvar VARIABLE TEXT
textvar = 'testvalue'
SHOW CONVERT(textvar INFILE 9 1)
'\d116\d101\d115\d116\d118\d097\d108\d117\d101'
ESCAPEBASE = 'x'
SHOW CONVERT(textvar INFILE 9 1)
'\x74\x65\x73\x74\x76\x61\x6C\x75\x65'