【问题标题】:Split a Comma Seperated String in Oracle在 Oracle 中拆分逗号分隔的字符串
【发布时间】:2023-01-03 15:43:52
【问题描述】:

我有一个表数据如下所示

我正在尝试将逗号分隔的字符串拆分为数组

我是这样做的,它在 Postgres 中有效,但在 oracle 中无效

select regexp_split_to_array( lower(subjects), ',') from students

【问题讨论】:

  • 将值存储为 CSV 是非常糟糕的数据库设计。你应该重新设计它

标签: oracle


【解决方案1】:

这是一个选项:创建一个函数分裂将逗号分隔值字符串放入行中并创建一个集合;返回数据类型是 Oracle 内置的 sys.odcivarchar2list。

SQL> create or replace function f_arr (par_string in varchar2)
  2    return sys.odcivarchar2list
  3  is
  4    retval sys.odcivarchar2list;
  5  begin
  6    select trim(regexp_substr(par_string, '[^,]+', 1, level))
  7      bulk collect into retval
  8      from dual
  9      connect by level <= regexp_count(par_string, ',') + 1;
 10    return retval;
 11  end;
 12  /

Function created.

SQL>

让我们试试看:

SQL> with students (student_id, subjects) as
  2    (select 1, 'ENGLISH,MATHS,SCIENCE' from dual union all
  3     select 2, 'BIOLOGY,PHYSICS'       from dual
  4    )
  5  select student_id,
  6    f_arr(subjects) result
  7  from students;

STUDENT_ID RESULT
---------- ------------------------------------------------------------
         1 ODCIVARCHAR2LIST('ENGLISH', 'MATHS', 'SCIENCE')
         2 ODCIVARCHAR2LIST('BIOLOGY', 'PHYSICS')

SQL>

好的,现在您将这些主题放在一个集合中,但是 - 您将如何处理这些主题?也许你应该解释一下你试图解决的问题,因为这个可能不是您拥有的最佳选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-21
    • 2015-03-07
    • 2017-10-30
    • 1970-01-01
    • 2016-05-28
    • 2014-01-03
    • 2017-01-05
    • 2015-04-01
    相关资源
    最近更新 更多