12

MySQL/MSSQL には、以下に示すように、null 値を検出するためにクエリ内で使用できるインライン if 関数があります。

SELECT

...

foo.a_field AS "a_field",
SELECT if(foo.bar is null, 0, foo.bar) AS "bar",
foo.a_field AS "a_field",

...

私が今直面している問題は、このインライン if 構文をサポートしていないように見えるため、このコードを Oracle データベースで実行するのは安全ではないということです。

Oracleに同等のものはありますか?

4

6 に答える 6

17

ここでの残りの回答を補足するには、主に NULL 値と COALESCE/NVL/NVL2 を扱います。

SELECT *
FROM TheTable
WHERE field1 = CASE field2 WHEN 0 THEN 'abc' WHEN 1 THEN 'def' ELSE '' END

CASE ステートメントは明らかに簡潔ではありませんが、柔軟性を重視しています。これは、条件が NULL 性に基づいていない場合に特に役立ちます。

于 2009-09-15T17:07:13.317 に答える
14

標準の COALESCE 関数を使用します。

SELECT COALESCE(foo.bar, 0) as "bar", ...

または、同じことを行う Oracle 独自の NVL 関数を使用します。

于 2009-09-15T17:02:33.047 に答える
12

NVLまたはNVL2を使用したい

NVL(t.column, 0)
NVL2( string1, value_if_NOT_null, value_if_null )
于 2009-09-15T17:01:27.633 に答える
0

うん、NVLはトリックを行う必要があります。

于 2009-09-15T17:01:57.027 に答える
0

nvl 関数が必要です: nvl(foo.bar, 0)

Oracle は、さまざまな if と case もサポートしています。

于 2009-09-15T17:01:58.210 に答える
0

するだけnvl(foo.bar,0)、する必要はありません

(select nvl(foo.bar,0)... 
于 2009-09-15T17:04:35.007 に答える