Как создать двоичный столбец на основе символа starts в другом столбце в Oracle SQL Developer?

sql #oracle #case

#sql #Oracle #случай

Вопрос:

У меня есть таблица, подобная приведенной ниже, в Oracle SQL Developer:

 col1
-------
Regio Apo
Makreg One15
Regio Kawalisz
Makreg Podl
Makrego BB
AAA
 

И на основе значений в «col1» мне нужно создать новый столбец «col2». Это должны быть двоичные столбцы:

  • Когда значение в «col1» начинается с «M», верните 1 в «col2»
  • Когда значение в «col1» начинается с «R», возвращает 0 в «col2»
  • скорее все значения в «col1» начинаются с M или R, но на всякий случай, если он начинается с другой буквы, дают NULL

Итак, в результате мне нужно что-то вроде приведенного ниже:

 col1             col2
-----------------------
Regio Apo      | 0
Makreg One15   | 1
Regio Kawalisz | 0
Makreg Podl    | 1
Makrego BB     | 1
AAA            | NULL
 

Как я могу это сделать в Oracle SQL Developer?

Комментарии:

1. «Как я могу это сделать в Oracle SQL Developer?» Пожалуйста, обратите внимание, что SQL Developer не имеет к этому никакого отношения. SQL Dev — это просто клиентская программа, которая отправляет вам инструкцию sql в базу данных для обработки, а затем показывает результаты. Ваш вопрос связан с тем, как написать SQL. Ответ тот же, если независимо от того, какую клиентскую программу вы используете — SQL Dev, sqlplus и т.д.

Ответ №1:

CASE кажется наиболее очевидным:

 SQL> with test (col1) as
  2    (select 'Regio Apo'      from dual union all
  3     select 'Makreg One15'   from dual union all
  4     select 'Regio Kawalisz' from dual union all
  5     select 'Makreg Podl'    from dual union all
  6     select 'Makrego BB'     from dual union all
  7     select 'AAA'            from dual
  8    )
  9  select col1,
 10    case when substr(col1, 1, 1) = 'M' then 1
 11         when substr(col1, 1, 1) = 'R' then 0
 12         else null
 13    end cols
 14  from test;

COL1                 COLS
-------------- ----------
Regio Apo               0
Makreg One15            1
Regio Kawalisz          0
Makreg Podl             1
Makrego BB              1
AAA

6 rows selected.

SQL>
 

Ответ №2:

Мне нужно создать новый столбец «col2».

Добавление виртуального столбца в таблицу:

 ALTER TABLE table_name
  ADD (
    col2 NUMBER(1,0)
         GENERATED ALWAYS AS (
           CASE SUBSTR(col1, 1, 1)
           WHEN 'M' THEN 1
           WHEN 'R' THEN 0
           ELSE NULL
           END
         )
);
 

Что для образца данных:

 CREATE TABLE table_name (col1) AS
  SELECT 'Regio Apo'      FROM DUAL UNION ALL
  SELECT 'Makreg One15'   FROM DUAL UNION ALL
  SELECT 'Regio Kawalisz' FROM DUAL UNION ALL
  SELECT 'Makreg Podl'    FROM DUAL UNION ALL
  SELECT 'Makrego BB'     FROM DUAL UNION ALL
  SELECT 'AAA'            FROM DUAL;
 

После добавления столбца, затем:

 SELECT * FROM table_name;
 

Выводит:

COL1 COL2
Regio Apo 0
Makreg One15 1
Регио Кавалиш 0
Makreg Podl 1
Makrego BB 1
AAA

db<>скрипка здесь