これは、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。私もそれに巻き込まれました。