【问题标题】:How to create binary column based on starts character in other column in Oracle SQL Developer?如何根据 Oracle SQL Developer 中其他列中的开始字符创建二进制列?
【发布时间】:2022-01-12 08:07:33
【问题描述】:

我在 Oracle SQL Developer 中有如下表格:

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

根据“col1”中的值,我需要创建新列“col2”。它应该是二进制列:

  • 当“col1”中的值以“M”开头时,“col2”中返回 1
  • 当“col1”中的值以“R”开头时,“col2”中返回 0
  • 宁愿“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 中做到这一点?

【问题讨论】:

  • “我如何在 Oracle SQL Developer 中做到这一点?” 请注意,SQL Developer 与此无关。 SQL Dev 只是一个客户端程序,它将您的 sql 语句提交给数据库进行处理,然后显示结果。您的问题与如何编写 SQL 有关。无论您使用什么客户端程序 - SQL Dev、sqlplus 等,答案都是一样的。

标签: sql oracle case


【解决方案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
    Regio Kawalisz 0
    Makreg Podl 1
    Makrego BB 1
    AAA

    db小提琴here

    【讨论】:

      猜你喜欢
      • 2021-08-31
      • 2022-01-12
      • 2015-12-05
      • 2022-01-10
      • 1970-01-01
      • 2012-08-02
      • 2023-01-12
      • 1970-01-01
      • 2012-08-24
      相关资源
      最近更新 更多