sql >> データベース >  >> RDS >> Oracle

OracleのCAST()関数

    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パラメータを使用して結果が表示されますが、渡した実際の値はスペイン語でした。

    詳細

    データ型間で変換する場合は、注意が必要なことがたくさんあります。 CAST()の使用の詳細については、Oracleのドキュメントを参照してください。 機能。


    1. Django DBをSQLiteからMySQLに移行するための最良の方法は何ですか?

    2. 最大値を見つけて、SQLサーバーの別のフィールドから対応する値を表示します

    3. OracleからMySQL/Perconaサーバーに移行する方法

    4. PHPが複数のチェックボックスとテキストボックスの配列をMySQLデータベースに挿入