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

3
有一个关于在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')

我不确定我是否嵌套错误,但似乎无法使其工作,有什么想法吗?
2个回答

2

我认为您正在寻找一个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

我不确定这是否是Oracle的语法 - 但可以试一下。 - Trent
差一点就可以了,但我已经调整过了,现在它可以在Oracle中正常工作了... *8-) - Alex Poole
谢谢Trent,这很有帮助! - A.Leggett

2
您可以使用case表达式来决定使用哪个替换值:

您可以使用case表达式来决定使用哪个替换值:

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                                            

我点赞是因为我喜欢这个答案。一开始我想到的是在REPLACE之外使用CASE,但我喜欢在里面使用它的这个版本。此外,示例和验证数据做得很好。 - unleashed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接