変換関数

Netezza Performance ServerSQL フォーマット関数を使用して、データ型(日付/時刻、整数、浮動小数点、数値)をフォーマットされた文字列に変換したり、フォーマットされた文字列から特定のデータ型に変換したりできます。

to_* 関数はいずれも共通の呼び出し規約に従っており、最初の引数はフォーマットされる値で、2 番目の引数は入力または出力のフォーマットを定義するテンプレートとなっています。 これらのテンプレートで使用されるパターンは、日付/時刻変換のテンプレートパターンで説明されています。

注:to_char型は、内部的に'dateデータ型を'timestampデータ型にキャストする。
次の表では、変換関数について説明します。
表 1. 変換関数
タイプ 説明
hex_to_binary(VARCHAR) 16 進文字にエンコードされた文字列を 、同等のバイナリーに変換します。 VARBINARY 値を返します。  
hex_to_geometry(VARCHAR) 16 進文字にエンコードされた文字列を 、同等の ST_GEOMETRY 値に変換します。  
int_to_string(INT8, byteint) 10 進数値を 16 進数、10 進数、8 進数、または 2 進数のストリングに 変換します。 この関数は VARCHAR 値を返します。 最初の 引数は、変換する 10 進数値を指定し、2 番目の引数は 変換先の数体系の基数を指定します。
  • 基数 2 = 2 進数
  • 基数 8 = 8 進数
  • 基数 10 = 10 進数
  • 基数 16 = 16 進数
 
string_to_int(VARCHAR, byteint) 16 進数、10 進数、8 進数、または 2 進数のストリングを 10 進数値に変換します。 この関数は INT8 値を返します。 最初の 引数は、変換する文字列を指定し、2 番目の引数は 最初の引数の数体系の基数を指定します。
  • 基数 2 = 2 進数
  • 基数 8 = 8 進数
  • 基数 10 = 10 進数
  • 基数 16 = 16 進数
 
to_char(value,template) 指定された値 (日付、タイム・スタンプ、実数、倍精度、または数値を指定可能) を文字ストリングに変換します。
  • テンプレートで二重引用符に囲まれたテキストは、パススルーされます。
  • 二重引用符を出力するには、その前にバックスラッシュを付けてください。
  • この関数では、正数を char に変換する場合、正の値と負の値の長さが等しくなるように先行ブランクが挿入されます。 この先行ブランクを抑止するには、FM プレフィックス・オプションを使用してください。
表2を参照。
to_number(text,template) 文字ストリングを数値に変換します。 select to_number('12,454.8-', '99G999D9S');

戻り値: -12454.8

to_date(text,template) 文字ストリングを日付に変換します。 テンプレートの先頭の項目として FX プレフィックスを指定しない限り、複数のブランク・スペースが飛ばされます。 select to_date('31 Dec 2015','DD Mon YYYY');

戻り値: 2015-12-31

select to_date('31 Dec 2015','FXDD Mon YYYY');

戻り値: 2015-12-31

select to_date('31 Dec 2015 20:33:33','DD Mon YYYY HH24":"MI":"SS');

戻り値: 2015-12-31

to_timestamp(text,template) 文字ストリングをタイム・スタンプに変換します。 テンプレートの先頭の項目として FX プレフィックスを指定しない限り、複数のブランク・スペースが飛ばされます。 select to_timestamp('31 Dec 2015 08:38:40 pm', 'DD Mon YYYY HH:MI:SS am');

戻り値: 2015-12-31 20:38:40

なお、テンプレートの午前/午後の指定子は、入力ストリングのものと一致していなくても構いません。 ただし、同じフォーマット (ピリオドの有無) を使用していなければなりません。

to_char 関数の例

以下の表に示す式のいずれかを含む SELECT 文によって、以下に示す結果が返されます。

表 2. to_char 関数の例
結果 コメント
to_char(date '2015-02-14', 'YYYY Month') '2013 February ' 実際に必要な文字数に関係なく、月の名前のために 9 文字 (September の文字数) が予約済みのため、February の後に末尾ブランクが付きます。
to_char(date '2015-02-14', 'YYYY FMMonth') '2013 February' FM プレフィックスにより、February の後の末尾ブランクが削除されます。
to_char(timestamp '2015-02-14 20:19:07', 'HH24:MI:SS') '20:19:07'  
to_char(timestamp '2015-02-14 20:19:07', 'HH:MI:SS am') '08:19:07 pm' テンプレートで指定された午前/午後の指定子は、時刻に対応するように出力で調整されます (0 から 12 の時刻では am、12 から 23 の時刻では pm)。 テンプレートで指定された午前/午後の指定子のフォーマット (大文字/小文字、ピリオドの有無) が出力で使用されます。
to_char(timestamp '2015-02-14 20:19:07', 'Day, DD  HH:MI:SS am')
'Monday   , 04 08:19:07 pm'
実際に必要な文字数に関係なく、曜日の名前のために 9 文字 (Wednesday の文字数) が予約済みのため、Monday の後に末尾ブランクが 3 つ付きます。
to_char(timestamp '2015-02-14 20:19:07', 'FMDay, DD  HH:MI:SS am')
'Monday, 4 8:19:7 pm'
FM プレフィックスにより、Monday の後の末尾ブランクが削除されます。 また、日付、時間、および秒から先行ゼロも削除されます。
to_char(timestamp '2015-02-14 20:19:07', 'Day, DD  FMHH:MI:SS am')
'Monday   , 04 8:19:7 pm'
FM プレフィックスにより、時間と秒から先行ゼロが削除されます。
to_char(125, '999') ' 125' 結果は 4 文字からなるストリングです。すなわち、テンプレート内の各位置に対応する 1 文字ずつと、正 (+) 記号の代わりとなる、数値の前の追加ブランク 1 つです。
to_char(-125, '999') '-125' 負 (-) 記号があるため、数値の前にブランクがありません。
to_char(125, '"999D999') ' 125.000' このテンプレートは、出力に小数点以下 3 桁を含めるよう指定しています。 結果は 8 文字からなるストリングです。すなわち、テンプレート内の各位置に対応する 1 文字ずつ (小数部区切り文字もテンプレート内の位置の 1 つとしてカウント) と、正 (+) 記号の代わりとなる、数値の前の追加ブランク 1 つです。
to_char(-125, '"The number is "999"."') 'The number is -125.' 二重引用符内のテキストはパススルーされます。
to_char(125, '"The number is "FM999"."') The number is 125. FM プレフィックスにより、正数の前に通常付くブランクの追加が抑止されます。
to_char(12.7, '99.9') ' 12.7' 結果は 5 文字からなるストリングです。すなわち、テンプレート内の各位置に対応する 1 文字ずつと、正 (+) 記号の代わりとなる、数値の前の追加ブランク 1 つです。
to_char(12.7, 'FM99.9') '12.7' FM プレフィックスにより、正数の前に通常付くブランクの追加が抑止されます。
to_char(0.1, '999.99')
'    .10'
結果は 7 文字からなるストリングです。すなわち、テンプレート内の各位置につき 1 文字ずつです。 (小数点も、テンプレート内の位置の 1 つとしてカウントします。)
to_char(-0.1, '999.99')
'   -.10'
結果は 7 文字からなるストリングです。すなわち、テンプレート内の各位置につき 1 文字ずつです。 (小数点も、テンプレート内の位置の 1 つとしてカウントします。)
to_char(-0.1, 'FM999.99') '-.1' FM プレフィックスにより、先行ブランクと後続ゼロが抑止されます。
to_char(.1, '0.9') ' 0.1' テンプレート内の 0 は、テンプレートにおける不使用の位置の数だけ、先行ゼロを追加するよう指定します。 0 は、テンプレート内の 1 つの位置としてカウントします。
to_char(-12.7, '0999.9') '-0012.7' テンプレート内の 0 は、テンプレートにおける不使用の位置の数だけ、先行ゼロを追加するよう指定します。 0 は、テンプレート内の 1 つの位置としてカウントします。
to_char(12.7, '90999.9')
'  0012.7'
結果は 8 文字からなるストリングです。すなわち、テンプレート内の各位置に対応する 1 文字ずつと、正 (+) 記号の代わりとなる、数値の前の追加ブランク 1 つです。
to_char(-12.7, '9999999')
'     -13'
結果は 8 文字からなるストリングです。すなわち、テンプレート内の各位置に対応する 1 文字ずつと、負 (-) 記号のための追加文字 1 つです。
to_char(485, '9 9 9') ' 4 8 5'  
to_char(1485, '9,999') ' 1,485'  
to_char(1485, '9G999') ' 1,485' G パターンは、ロケールに合わせて指定されたグループ区切り文字を表します。
to_char(148.5, '999.999') ' 148.500'  
to_char(148.5, 'FM999.999') '148.5'  
to_char(148.5, 'FM999.990') '148.500'  
to_char(148.5, '999D999') ' 148.500' 使用する小数部区切り文字は、ロケールに応じて異なります。
to_char(3148.5, '9G999D999') ' 3,148.500' G パターンは、ロケールに合わせて指定されたグループ区切り文字を表します。
to_char(125,'S999') '+125' S パターンによって、出力に必ず符号を含めるように指定されているため、数値の前にブランクがありません。
to_char(125, '999S') '125+' S パターンによって、出力に必ず符号を含めるように指定されているため、数値の前にブランクがありません。
to_char(-485, '999S') '485-'  
to_char(-485, 'MI999') '-485' 負数の場合、MI パターンによって、対応する位置に負 (-) 記号が配置されます。
to_char(-485, '999MI') '485-'
to_char(485, 'MI999') ' 485' 正数の場合、MI パターンによって、対応する位置にブランク 1 つが配置されます。 MI パターンは、正数の前の先行ブランクに影響を及ぼしません。
to_char(485, '999MI') ' 485 '
to_char(485, 'FM999MI') '485 ' FM プレフィックスにより、正数の前に通常付くブランクの追加が抑止されますが、MI サフィックスによって追加された末尾ブランクは影響を受けません。
to_char(485, 'PL999') '+485' 正数の場合、PL パターンによって、対応する位置に正 (+) 記号が配置されます。
to_char(485, '999PL') '485+'
to_char(-485, '999PL') '-485 ' 負数の場合、PL パターンによって、対応する位置にブランク 1 つが配置されます。 PL サフィックスは、負数の前の負 (-) 記号に影響を及ぼしません。
to_char(-485, 'PL999') ' -485 '
to_char(-3485, 'SG9999') '-3485'  
to_char(-3485, 'S9G999') '-3,485'  
to_char(-3485, '99SG99') '34-85'  
to_char(-485, '999PR') '<485>'  
to_char(485, '999PR') ' 485'  
to_char(485, 'FM999PR') '485' FM プレフィックスにより、正数の前に通常付くブランクの追加が抑止されます。
to_char(485, 'RN') 'CDLXXXV'  
to_char(5.2, 'RN') 'V' ローマ数字では、小数部が無視されます。
to_char(482, '999th') ' 482nd' th サフィックスによって、適切な序数サフィックス (st、nd、rd、または th) が付加されます。
to_char(485.8, '"Pre: "FM999" Post:" .999') 'Pre: 485 Post: .800' FM プレフィックスにより、正数の前に通常付くブランクの追加が抑止されます。
to_char(485.8, '"Pre: "FM999" Post:" .999') 'Pre: -485 Post: .800' FM プレフィックスは、負数に影響を及ぼしません。
to_char(12, '99V999') ' 12000'  
to_char(12.4, '99V999') ' 12400'  
to_char(12.45, '99V9') ' 125'