Oracle Databaseでは、CAST()
関数は、引数を別のデータ型に変換します。
具体的には、あるタイプの組み込みデータ型またはコレクション型の値を別の組み込みデータ型またはコレクション型に変換できます。
構文
構文は次のようになります:
CAST({ expr | MULTISET (subquery) } AS type_name
[ DEFAULT return_value ON CONVERSION ERROR ]
[, fmt [, 'nlsparam' ] ])
例
デモンストレーションの例を次に示します。
SELECT CAST('10-AUG-30' AS TIMESTAMP)
FROM DUAL;
結果:
10-AUG-30 12.00.00.000000000 AM
変換エラー時にデフォルト値を提供する
DEFAULT return_value ON CONVERSION ERROR
値の変換中にエラーが発生した場合に何を返すかを指定する引数。
例:
SELECT CAST(
'Homer' AS NUMBER
DEFAULT '0' ON CONVERSION ERROR
)
FROM DUAL;
結果:
0
DEFAULT return_value ON CONVERSION ERROR
引数:
SELECT CAST(
'Homer' AS NUMBER
)
FROM DUAL;
結果:
ORA-01722: invalid number
形式を指定する– fmt
引数
この例では、 fmt
を使用します 最初の引数の日付の形式を指定する引数:
SELECT CAST(
'Friday, 03 September 2021' AS TIMESTAMP,
'Day, DD Month YYYY'
)
FROM DUAL;
結果:
03-SEP-21 12.00.00.000000000 AM
フォーマットを省略した場合
形式を省略すると、最初の引数が結果のデータ型のセッションのデフォルトの形式に準拠しているかどうかによっては、エラーが発生する可能性があります。
format引数を省略すると、次のようになります。
SELECT CAST(
'Friday, 03 September 2021' AS TIMESTAMP
)
FROM DUAL;
結果:
Error report - ORA-01858: a non-numeric character was found where a numeric was expected
この場合、文字列をTIMESTAMP
に変換しようとしました 値ですが、文字列がTIMESTAMP
に似ていませんでした セッションのNLS_TIMESTAMP_FORMAT
に基づく値 パラメータ、およびエラーが発生しました。
現在のセッションでTIMESTAMP
に使用されている形式は次のとおりです 値:
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_TIMESTAMP_FORMAT';
結果:
DD-MON-RR HH.MI.SSXFF AM
それを変えましょう:
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'fmDay, DD Month YYYY HH.MI.SSXFF AM';
結果:
Session altered.
それでは、前の変換をもう一度実行してみましょう:
SELECT CAST(
'Friday, 03 September 2021' AS TIMESTAMP
)
FROM DUAL;
結果:
Friday, 3 September 2021 12.0.0.000000000 AM
今回はエラーはありません。
ただし、NLS_TIMESTAMP_FORMAT
を明示的に変更したことに注意してください。 ここのパラメータは、通常、NLS_TERRITORY
を変更することをお勧めします 代わりにパラメータ。 NLS_TERRITORY
の変更 パラメータは、日付形式、通貨記号などの他のNLSパラメータを暗黙的に変更します。
いずれの場合も、上記のように、NLSパラメータを変更する代わりに、 fmt
を使用できます。 関数を呼び出すときの引数。
nlsparam
引数
オプションのnlsparam
を使用できます 関数内からNLSパラメーターを指定する引数。
例:
ALTER SESSION SET NLS_TERRITORY = 'Australia';
ALTER SESSION SET NLS_DATE_LANGUAGE = 'English';
ALTER SESSION SET NLS_DATE_FORMAT = 'fmDay, DD Month YYYY';
SELECT
CAST(
'sábado, 10 agosto 30' AS DATE,
'Day, DD Month RR',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
結果:
Saturday, 10 August 2030
この場合、セッションのNLSパラメータのいくつかを設定することから始めました。次に、CAST()
を呼び出したとき 、スペイン語で文字列を渡してから、 nlsparam
を使用しました これを指定する引数。
そのため、セッションのNLSパラメータを使用して結果が表示されますが、渡した実際の値はスペイン語でした。
詳細h2>
データ型間で変換する場合は、注意が必要なことがたくさんあります。 CAST()
の使用の詳細については、Oracleのドキュメントを参照してください。 機能。