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

OracleのNVL2機能

    このSQLチュートリアルでは、OracleのNVL2関数の説明と例を示します

    NVL2関数は入れ子関数です。最初の印象を調べ、最初の印象がnullでない場合、NVL2関数は2番目の式を返します。第一印象がnullの場合、3番目の式を返します。

    expr1 :nullを含む可能性のあるソース値または式です。列名、列名の関数を指定できます
    expr2 :これは、expr1がnullでない場合に返される式の値です
    expr3 :これは、expr1がnullの場合に返される式の値です

    引数expr1は任意のデータ型を持つことができます。引数expr2およびexpr3は、LONG以外の任意のデータ型を持つことができます。

    SQL> select nvl2(user_name,1,2) from apps.fnd_user where rownum < 5;
    
    NVL2(USER_NAME,1,2)
    -------------------
    1
    1
    1
    1
    
    SQL> select nvl2(end_date,1,2) from apps.fnd_user where rownum < 5;
    
    NVL2(END_DATE,1,2)
    ------------------
    1
    2
    1
    1
    
    
    >

    expr2とexpr3のデータ型が異なる場合:

    expr2が文字データの場合、expr3がヌル定数でない限り、OracleDatabaseはexpr3をexpr2のデータ型に変換してから比較します。その場合、データ型の変換は必要ありません。 Oracleは、expr2の文字セットでVARCHAR2を返します。

    expr2が数値の場合、Oracleは、数値の優先順位が最も高い引数を判別し、他の引数をそのデータ型に暗黙的に変換して、そのデータ型を返します。

    expr2が文字データでない限り、戻り型のデータ型は常にexpr2のデータ型と同じです。文字データの場合、戻り値は常にvarchar2です

    SQL> select nvl2(end_date,1,'a') from apps.fnd_user where rownum < 5;
    select nvl2(end_date,1,'a') from apps.fnd_user where rownum < 5
    *
    ERROR at line 1:
    ORA-01722: invalid number
    
    SQL> select nvl2(end_date,'a',1) from apps.fnd_user where rownum < 5;
    
    N
    -
    a
    1
    a
    a
    
    

    使用法

    SELECT last_name, salary, NVL2(commission_pct,
    salary + (salary * commission_pct), salary) income
    FROM employees WHERE last_name like 'B%'
    ORDER BY last_name;

    関連記事

    SQLの単一行関数
    OracleのNULLIF関数
    Oracleのステートメントの更新
    Oracleの合体関数
    OracleLISTAGG関数
    oracle日付関数


    1. OracleORA-00979-GROUPBY式ではありません

    2. メールマージでのMSAccessデータの使用

    3. なぜPostgreSQLを学ぶ必要があるのですか?

    4. GoogleDatastudioを使用したHerokuPostgresql