PostgreSQL の Oracle DECODE 関数では、CASE 式または共用体を使用できます。 CASE 式は、条件に基づいて最初に一致した結果を返します。構文は CASE WHEN 条件 THEN 結果 ELSE 結果 END です。ユニオンは、UNION ALL 演算子を使用して複数の SELECT ステートメントを結合し、各条件を満たす結果列を含むテーブルを返します。
PostgreSQL での Oracle DECODE 関数の置き換え
Oracle DECODE 関数は、条件に基づいて返すために使用されます。異なる値を持つ判定関数。 PostgreSQL には DECODE 関数と全く同等のものはありませんが、CASE
式または共用体を使用して同様の機能を実現できます。
CASE式
CASE
式の構文は以下のとおりです。
<code>CASE WHEN условие1 THEN результат1 WHEN условие2 THEN результат2 ... ELSE результат ELSE END</code>
の条件に基づいて判定します。シーケンスを実行し、条件を満たす最初の結果を返します。条件が満たされない場合は、ELSE
結果が返されます。
Join
Join は、複数の SELECT ステートメントを使用して複数のテーブルからデータを取得する手法です。 UNION ALL
演算子を使用して複数の SELECT ステートメントを結合することで、DECODE 関数の機能を実装することもできます。
<code>SELECT CASE WHEN условие1 THEN résultat1 ELSE NULL END AS результат_1 UNION ALL SELECT CASE WHEN условие2 THEN résultat2 ELSE NULL END AS результат_2 ...</code>
上記のクエリは、各行に条件を満たす結果列。
例
次の列を持つテーブル people
があるとします:
name
- 人の名前性別
- 人の性別性別に基づいて人の敬称を取得するクエリを作成します。
Oracle DECODE 関数:
<code>SELECT name, DECODE(gender, 'M', 'Mr.', 'Ms.') AS title FROM people;</code>
PostgreSQL CASE 式:
<code>SELECT name, CASE WHEN gender = 'M' THEN 'Mr.' WHEN gender = 'F' THEN 'Ms.' ELSE NULL END AS title FROM people;</code>
PostgreSQL ユニオン:
<code>SELECT name, CASE WHEN gender = 'M' THEN 'Mr.' ELSE NULL END AS title UNION ALL SELECT name, CASE WHEN gender = 'F' THEN 'Ms.' ELSE NULL END AS title FROM people;</code>
3 つのクエリはすべて、次のように同じ結果を生成します:
name | title |
---|---|
ジョン | さん |
メアリー | さん |
以上がOracleでデコードをpgに変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。