如何在 SQL SELECT 查询中直接用特定值替换字符串 (Oracle)

How to replace a string with a specific value directly in SQL SELECT query (Oracle)

我有一个 table,里面有员工数据:

+----+-------+----------+------------+
| ID | Name  | LastName | Salutation |
+----+-------+----------+------------+
|  1 | John  | Doe      | Mr         |
|  2 | Alice | Smith    | Ms         |
+----+-------+----------+------------+

我想 select 一些数据,但我想使用 [=33] 将 Mr 替换为 1 并将 Ms 替换为 2 =]查询自身。

我尝试使用 REGEXP_REPLACE 实际上对其中一种称呼有效的方法:

SELECT ID, Name, LastName, REGEXP_REPLACE(Salutation, 'Mr', '1') FROM employees

它给了我以下结果:

+----+-------+----------+------------+
| ID | Name  | LastName | Salutation |
+----+-------+----------+------------+
|  1 | John  | Doe      | 1          |
|  2 | Alice | Smith    | Ms         |
|  3 | John  | Smith    | 1          |
|  4 | Alice | Doe      | Ms         |
+----+-------+----------+------------+

如何将 Ms 也替换为 2

您可以使用case 语句来实现它。这是 DEMO

select
    ID,
    Name,
    LastName,
    (case when Salutation = 'Mr' then 1  else 2 end) as Salutation
from employee
order by
    ID

您可以使用 decode

select ID, Name, LastName.
    DECODE(Salutation,'Mr',1,2) as Salutation
from employee
SELECT
    ID, Name, LastName,
    REPLACE(TMP_TABLE.TMP_Salutation, 'Ms', '2')
FROM (
    SELECT
    REPLACE(Salutation, 'Mr', '1') TMP_Salutation
    FROM employees
) TMP_TABLE;

此代码将首先在子查询中将所有出现的 'Mr' 替换为“1”,并将 return 替换为 table,我们为其提供别名 'TMP_TABLE'。然后,'TMP_TABLE' 中出现的所有 'Ms' 都将替换为 '2'