【发布时间】:2023-01-03 15:43:52
【问题描述】:
我有一个表数据如下所示
我正在尝试将逗号分隔的字符串拆分为数组
我是这样做的,它在 Postgres 中有效,但在 oracle 中无效
select regexp_split_to_array( lower(subjects), ',') from students
【问题讨论】:
-
将值存储为 CSV 是非常糟糕的数据库设计。你应该重新设计它
标签: oracle
我有一个表数据如下所示
我正在尝试将逗号分隔的字符串拆分为数组
我是这样做的,它在 Postgres 中有效,但在 oracle 中无效
select regexp_split_to_array( lower(subjects), ',') from students
【问题讨论】:
标签: oracle
这是一个选项:创建一个函数分裂将逗号分隔值字符串放入行中并创建一个集合;返回数据类型是 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>
好的,现在您将这些主题放在一个集合中,但是 - 您将如何处理这些主题?也许你应该解释一下你试图解决的问题,因为这个可能不是您拥有的最佳选择。
【讨论】: