如何在 REPLACE () 语句中使用和 IF 语句?

How can I use and IF statement within a REPLACE () statement?

收到有关在 REPLACE 语句中使用 IF 语句的查询(如果可能的话!)

示例:

REPLACE("Person Legislative Information"."Marital Status",'Widowed','Widower')

这行得通,但我需要一个 IF 语句来根据性别(可以从另一列中提取)区分他们是鳏夫还是寡妇。

我是否可以在开始 REPLACE 语句之前放置一个 IF 语句?

示例:

REPLACE(REPLACE(IF("Worker"."Gender" = 'M')"Person Legislative Information"."Marital Status",'Widowed','Widower')IF("Worker"."Gender" = 'F')"Person Legislative Information"."Marital Status",'Widowed','Widow')

不确定我是否嵌套错误,但我似乎无法让它工作,有什么想法吗?

我认为您正在寻找 CASE 语句

SELECT
  CASE "Worker"."Gender"
    WHEN 'F' THEN
      REPLACE("Person Legislative Information"."Marital Status", 'Widowed', 'Widow')
    ELSE
      REPLACE("Person Legislative Information"."Marital Status", 'Widowed', 'Widower')
  END marital_status

您可以使用 case expression 来决定使用哪个替换值:

REPLACE("Person Legislative Information"."Marital Status",
    'Widowed', CASE "Worker"."Gender" WHEN 'F' THEN 'Widow' ELSE 'Widower' END)

演示:

with "Worker" (id, "Gender") as (
  select 1, 'M' from dual
  union all select 2, 'F' from dual
),
"Person Legislative Information" (id, "Marital Status") as (
  select 1, 'Widowed' from dual
  union all select 2, 'Widowed' from dual
)
SELECT "Worker"."Gender", "Person Legislative Information"."Marital Status",
  REPLACE("Person Legislative Information"."Marital Status",
    'Widowed', CASE "Worker"."Gender" WHEN 'F' THEN 'Widow' ELSE 'Widower' END)
    AS "New Marital Status"
FROM "Worker"
JOIN "Person Legislative Information"
ON "Person Legislative Information".id = "Worker".id;

G Marital New Marital Status                               
- ------- -------------------------------------------------
M Widowed Widower                                          
F Widowed Widow