はじめに

本記事では、「CAST関数を使用しデータ型の変換に失敗した場合の動作」および「デフォルト動作の変更方法」について解説します。変換できないデータが含まれている場合、CAST関数の処理は失敗します。

CAST関数に失敗した場合は、デー​​タ型によって動作が異なります。
項番データ型CAST関数失敗時のデフォルト動作
日付/時刻型NULLとなる
リテラルエラー(例:ERROR 3758)が発生する
その他のデータ型エラー(例:ERROR 3682)が発生する

CAST関数については、以下の記事をご覧ください。

 データ型を強制的に変更する方法
 http://vertica-tech.ashisuto.co.jp/coercion_operators/

データ型の変換の失敗例

①日付/時刻型の場合

文字データ「Vertica」と「99999」を、日付/時刻型に変換した場合の失敗例です。

②リテラルの場合

リテラル「Vertica」を、数値型に変換した場合の失敗例です。

③その他のデータ型の場合

文字データ「Vertica」と「99999」を、数値型に変換した場合の失敗例です。

変換可能なデータ型については、以下の記事をご覧ください。

 データ型の変換と変更
 http://vertica-tech.ashisuto.co.jp/changing_data_type/

データ型の変換失敗時にデフォルト動作を変更する方法

データ型の変換に失敗した処理は、エラーが発生し処理が中断あるいはデータがNULLとして扱われます。失敗した処理をどのように扱うか、ユーザー側で制御することが可能です。データ型により制御できる動作が異なります。
項番データ型CAST関数失敗時のデフォルト動作変更可能な動作
日付/時刻型NULLとなるエラー(ERROR 3679)を発生させる
リテラルエラー(例:ERROR 3758)が発生する変更不可
その他のデータ型エラー(例:ERROR 3682)が発生するNULLとして扱う


①日付/時刻型の場合

日付データへの変換に失敗した場合は、NULLとしてデータが扱われます。EnableStrictTimeCastsパラメータを1に設定することで、日付データの変換に失敗した処理にエラー(ERROR 3679)を発生させ、処理を中断させることが可能です。

パラメータの設定方法については、以下の記事をご覧ください。

 Verticaのパラメータ設定方法
 http://vertica-tech.ashisuto.co.jp/parameters_on_vertica/

②リテラルの場合

リテラルの場合は、デフォルトのエラーを出力させる以外に動作を変更する方法はありません。

③その他のデータ型の場合

Verticaには、変換できないデータを無視するような関数や処理は存在しませんが、変換できないデータをNULLと扱う「::!」演算子があります。「::!」演算子を使用することで、データ変換に関するエラー(ERROR 3682)を発生させずに処理を継続できます。

注意事項

「::!」演算子を使用したNULLとして扱う動作は、テーブル・データのみ有効です。リテラルで、「::!」演算子を使用した場合は、エラーが出力されます。

参考情報

Data type coercion operators (CAST)
https://docs.vertica.com/12.0.x/en/sql-reference/language-elements/operators/data-type-coercion-operators-cast/

Cast failures
https://docs.vertica.com/12.0.x/en/sql-reference/language-elements/operators/data-type-coercion-operators-cast/cast-failures/

CAST演算子を使ったデータ型の明示的な変換
http://vertica-tech.ashisuto.co.jp/coercion_operators/

検証バージョンについて

この記事の内容はVertica 12.0で確認しています。

更新履歴

2023/6/27 本記事を公開