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

OracleSQLではNULLではなく最小値

    いずれかの引数がNULLの場合、他の引数を最小限に抑える必要があります。すべての引数がNULLの場合、NULLを返します。

    私は2つの引数に次のようなものを使用するかもしれません:

    LEAST(NVL(colA,colB), NVL(colB,colA))
    

    ただし、2つ以上の引数で醜くなり始めます:

    LEAST(COALESCE(colA,colB,colC)
         ,COALESCE(colB,colA,colC)
         ,COALESCE(colC,colA,colB))
    

    その時点で、私は魔法の値を検討し始めます。ただし、これにはバグがある可能性があります(たとえば、値の1つが合法的にである場合はどうなりますか 魔法の価値?):

    SELECT CASE WHEN r = maxv THEN NULL ELSE r END AS result
    FROM   (SELECT LEAST(NVL(:colA,maxv)
                        ,NVL(:colB,maxv)
                        ,NVL(:colC,maxv)) AS r, maxv
            FROM   (SELECT 9.999999999999999999999999999999999999999e125
                           AS maxv FROM DUAL));
    


    1. テーブル全体で変更データキャプチャ(CDC)を有効にする方法、またはSQLServerの列のリストを使用してテーブルでCDCを有効にする方法

    2. LithiumでのMySQL関数の呼び出し

    3. LINQ toSQLはどのバージョンのSQLServerをサポートしていますか?

    4. カンマ区切りの値を固定列数のターゲットテーブルに分割します