CONVERTファンクションは、値をあるデータ型から別のデータ型へ変換するファンクションです。
パラメータ
変換する対象の式または変数。
expressionの変換後のデータ型。データ型を表すキーワードについては、表7-3「CONVERTファンクションのtypeパラメータのキーワード」で説明します。
表7-3 CONVERTファンクションのtypeパラメータのキーワード
キーワード | 説明 |
---|---|
BINARY |
Oracle標準データ型への変換を示すものではないが、付加的な変換機能を提供。BINARYは変換を行わない。データ型にかかわりなく、すべての値の内部表現はテキスト値として返される。
|
BOOLEAN |
Oracle OLAP |
BYTE |
単一文字を0から255の範囲のASCIIの |
DATE |
Oracle OLAP |
DATETIME |
Oracle OLAP |
DECIMAL |
Oracle OLAP |
DSINTERVAL |
Oracle OLAP DML |
ID |
Oracle OLAP |
INFILE |
|
INTEGER |
Oracle OLAP |
LONGINTEGER |
Oracle OLAP |
NTEXT |
Oracle OLAP標準データ型への変換。 |
NUMBER [( |
Oracle OLAP |
PACKED |
数値を10進値に変換してから、パック形式(15桁およびプラス記号またはマイナス記号を含む8バイト長のテキスト値)に変換。小数部はパック形式の数字には表せないため、変換処理により小数は直近のINTEGERに丸められる。「PACKEDおよびBINARY変換」を参照。 |
ROWID |
テキスト値から |
SHORTDECIMAL |
Oracle OLAP |
SHORTINTEGER |
Oracle OLAP |
TEXT |
Oracle OLAP標準データ型への変換。SQLの |
TIMESTAMP |
Oracle OLAP DML |
TIMESTAMP_LTZ |
Oracle OLAP DML TIMESTAMP_LTZデータ型への変換。 |
TIMESTAMP_TZ |
Oracle OLAP DML |
UROWID |
テキスト値から |
YMINTERVAL |
Oracle OLAP DML |
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]] |
|
|
BINARY [width-exp] |
数値データをTEXTまたはID値に変換する際に使用される小数点以下の桁数を制御するINTEGER式。この引数を指定しない場合、CONVERTではDECIMALSオプションの現行の値(デフォルトは2)を使用します。
数値データのテキスト表現でカンマを使用して3桁を区切るかどうかを決定するブール式。式の値をYES
に設定すると、カンマが使用されます。この引数を指定しない場合、CONVERTではCOMMASオプションの現行の値(デフォルトはYES
)を使用します。
数値データのテキスト表現で負の値をカッコで囲むかどうかを決定するブール式。式の値をYES
に設定すると、カッコが使用され、NO
に設定すると、負の値の前にマイナス記号が付きます。この引数を指定しない場合、CONVERTではPARENSオプションの現行の値(デフォルトはNO
)を使用します。
日時式をテキストに変換する際に使用するテンプレートを指定するテキスト式。各データ・フィールドの有効な書式は、DATE_FORMATコマンドを使用して指定できる書式と同じです。
date_format引数を含めない場合、結果の書式はセッションのデフォルトの日付書式によって決まります。詳細は、「デフォルトの日時書式テンプレート」を参照してください。
日付のみの式をテキストに変換する際に使用するテンプレートを指定するテキスト式。テンプレートには、日付の4つの構成要素(日、月、年、曜日)についての書式指定を含めることができます。テンプレート内の各構成要素は、左の山カッコ(<
)と右の山カッコ(>
)で囲む必要があります。構成要素の前後または構成要素間には、別のテキストを入れることが可能です。
日付の各構成要素についての有効な書式は、DATEFORMATオプションで許可されている書式と同じです。
次の文では、CONVERTは今日の日付をdateformat引数で指定されている書式でのテキスト値として返します。
SHOW CONVERT(TODAY TEXT '<MM>-<DD>-<YY>')
この例では、今日の日付は1998年3月31日です。SHOW文は、この日付を次のように表示します。
03-31-98
dateformat引数を含めない場合、結果の書式はDATEFORMATオプションの現行の設定により決定されます。
DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの名前。Oracle OLAPでは、日付のみの値をTEXTまたはID値に変換する際、dwmqy-dimensionのVNFを使用します。dwmqy-dimensionのVNFが指定されていない場合は、デフォルトのVNFが使用されます。
次の文では、CONVERTは今日の日付を、YEARディメンションのVNFで指定されている書式でのテキスト値として返します。
show convert(today text year)
この例では、今日の日付は1998年3月31日です。SHOW文は、この日付を次のように表示します。
YR98
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に基づく書式が使用されます。
テキスト値の構成要素(月、日、年)の順序があいまいな場合に、指定されたテキスト値を日付のみの値として解釈する方法を指定するテキスト式。式は、'MDY'
、'DMY'
、'YMD'
、'YDM'
、'MYD'
、'DYM'
のいずれかです。各文字は、日付の構成要素(M
は月、D
は日、Y
は年)を表します。
date-orderまたはdwmqy-dimname引数を含めない場合には、テキスト式内の解釈のあいまいな点は、DATEORDERオプションの現行の設定によって解決されます。日付のみの値の完全な説明とその解釈方法については、DATEORDERオプションを参照してください。
テキスト値の構成要素の順序があいまいな場合に、指定されたテキスト値を日付のみの値として解釈する方法の決定に使用するVNFまたはデフォルト日付順序を持つ、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの名前。
date-orderまたはdwmqy-dimname引数を含めない場合には、テキスト式内の解釈のあいまいな点は、DATEORDERオプションの現行の設定によって解決されます。日付のみの値の完全な説明とその解釈方法については、DATEORDERオプションを参照してください。
CONVERTからの出力の幅を指定するINTEGER式。最小幅は7です。デフォルトの幅は、LSIZEオプションの現行の値です。escape-int引数を指定している場合、この引数は必須です。
出力にエスケープ・シーケンスを使用するかどうかを指定します。この引数には、表7-5「CONVERTのescape-intパラメータの値」に示されている値を指定できます。
表7-5 CONVERTのescape-intパラメータの値
値 | 説明 |
---|---|
-1 |
エスケープを使用しない。先行するWIDTH引数から1が減算されないように、-1の前にカンマが付く( |
0 |
(デフォルト)印刷不可の文字にエスケープを使用する。 |
1 |
すべての文字にエスケープを使用する。 |
OLAP DMLにおけるエスケープ・シーケンスの詳細は、「エスケープ・シーケンス」を参照してください。
変換後の結果の幅を制御するINTEGER
式。1
、2
または4
バイトを評価できます。デフォルトの幅は、BOOLEAN
では2
、INTEGER
では4
です。INTEGER
値が大きすぎて指定された幅に収まらない場合は、NA
が返されます。幅が無効または他のデータ型について指定されている場合は、エラーが発生します。
キャラクタ・セット変換の実行を禁止することを示すキーワード。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' |
|
|
|
|
|
|
|
|
|
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'