Как заменить строку указанным значением c непосредственно в запросе SQL SELECT (Oracle) - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть таблица с данными сотрудника:

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

Я хочу выбрать некоторые из этих данных, но я хочу заменить Mr на 1 и Ms на 2, используя сам запрос SQL.

Я пытался использовать 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?

Ответы [ 3 ]

2 голосов
/ 23 апреля 2020

Вы можете использовать decode

select ID, Name, LastName.
    DECODE(Salutation,'Mr',1,2) as Salutation
from employee
1 голос
/ 23 апреля 2020

Вы можете достичь этого с помощью оператора case. Вот это ДЕМО

select
    ID,
    Name,
    LastName,
    (case when Salutation = 'Mr' then 1  else 2 end) as Salutation
from employee
order by
    ID
0 голосов
/ 23 апреля 2020
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' в подзапросе и вернет таблицу, которой мы дали псевдоним 'TMP_TABLE'. Затем все вхождения «Ms» в этом «TMP_TABLE» будут заменены на «2»

...