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

OracleのDECODEがNVLとは異なる値を与えるのはなぜですか?

    これは、decodeステートメントの3つのパラメーターがNULLであるためです。ドキュメントに従って(私の強調)。

    Oracleは、exprと各検索値を比較する前の最初の検索値のデータ型に自動的に変換します。 ....最初の結果のデータ型がCHARの場合、または最初の結果がnullの場合、Oracleは戻り値をデータ型VARCHAR2に変換します

    あなたの場合、最初の結果はNULLであり、OracleはこれをVARCHAR2として扱います。戻り値は暗黙的にVARCHAR2に変換されています。 DECODE()を変更した場合 次のようにあなたは番号を得るでしょう:

    select decode(1, 0, 0, 0.75)
    

    NULLIF()を使用してNULLを達成できます 機能:

    select nullif(decode(1, 0, 0, 0.75), 0) ...
    

    返されるすべてのデータ型が同じであることを強制するCASEステートメントを使用することをお勧めします:

    select case 1 when 0 then null
                  else 0.75
           end ...
    

    1。私もそれに巻き込まれました。



    1. EF5:ファイル「{0}」をデータベース「{1}」として添付できません

    2. php、mysql、jquery、ajaxを使用してdivスクロールにデータを動的にロードする

    3. データ変更CTEのINSERTステートメントとCASE式の組み合わせ

    4. nvarchar(MAX)が保持する最大文字数はいくつですか?