SQL拆分逗号分隔的字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL拆分逗号分隔的字符串相关的知识,希望对你有一定的参考价值。

参考技术A

1、首先点击新建查询按钮,新建一个查询。

2、然后准备一个要分割的字符串,如下图所示。

3、接着用parsename进行分割,第二个参数是取分割后的第几个,如下图所示,第一个是最后一个位置。

4、然后最后一个才是第一个的位置。

5、接下来就可以通过位置把他们都取出来了。

6、最后就得到了字符串各个分割后的子字符串了。

PL SQL从用逗号分隔的字符串创建数字数组[重复]

【中文标题】PL SQL从用逗号分隔的字符串创建数字数组[重复]【英文标题】:PL SQL create array of number from string separated by comma [duplicate] 【发布时间】:2016-06-17 08:36:58 【问题描述】:

我有一串用逗号分隔的数字,例如“7845,6986,2548” 我想拆分逗号并将结果传递给 select 语句的 IN 子句 我曾经使用过这个功能:

create or replace TYPE t_in_list_tab as table of varchar2(4000);

create or replace FUNCTION in_list (p_in_list  IN  VARCHAR2) 
 RETURN t_in_list_tab
AS
  l_tab   t_in_list_tab := t_in_list_tab();
  l_text  VARCHAR2(32767) := p_in_list || ',';
  l_idx   NUMBER;
BEGIN
  LOOP
    l_idx := INSTR(l_text, ',');
    EXIT WHEN NVL(l_idx, 0) = 0;
    l_tab.extend;
    l_tab(l_tab.last) := TRIM(SUBSTR(l_text, 1, l_idx - 1));
    l_text := SUBSTR(l_text, l_idx + 1);
  END LOOP;

  RETURN l_tab;
END;

这个函数的返回类型是 varchar2 但我的列类型是数字,我尝试使用 TO_NUMBER 像:

select * from my_tbl where col1 IN (TO_NUMBER(select * from table(IN_LIST('7845,6986,2548'))));

但它没有工作, 有什么帮助吗?

【问题讨论】:

与重复问题相同 - 您无需使用IN ( ( SELECT ... FROM TABLE( ... ) ) ),只需使用MEMBER OF IN_LIST( '1,2,3' )即可。 您也可以拥有CREATE TYPE intlist IS TABLE OF INTEGER; 并在函数内使用该集合和TO_NUMBER() 【参考方案1】:

您需要将来自table collection expression(称为column_value)的列放入to_number() 调用中:

select to_number(column_value) from table(IN_LIST('7845,6986,2548')

演示:

with my_tbl(col1, col2) as (
  select 7845, 'Test 1' from dual
  union all select 2548, 'Test 2' from dual
  union all select 9999, 'Test 3' from dual
)
select * from my_tbl where col1 IN (
  select to_number(column_value) from table(IN_LIST('7845,6986,2548'))
);

      COL1 COL2 
---------- ------
      7845 Test 1
      2548 Test 2

您也可以使用连接:

select my_tbl.*
from
(
    select * from table(IN_LIST('7845,6986,2548'))
) tmp
join my_tbl
on my_tbl.col1 = to_number(tmp.column_value);

【讨论】:

您也可以使用MEMBER OF 集合运算符。 SELECT * FROM my_tbl WHERE col1 MEMBER OF IN_LIST( '7845,6986,2548' ) @MTO - 只有当函数返回一个数字表时才有效(除非你to_char(col1),这显然是错误的);它似乎没有进行隐式转换。如果一个数字集合可用或可以创建,那么使用数字集合当然是有意义的。

以上是关于SQL拆分逗号分隔的字符串的主要内容,如果未能解决你的问题,请参考以下文章

SQL拆分逗号分隔的字符串

sql 拆分逗号分隔的字符串(PIPELINED函数)

SQL:使用 SQL 将两个逗号分隔的字符串拆分为单独的索引行

sql 将逗号分隔的字符串拆分为值列表(返回游标)

如何根据一个字段是不是包含oracle sql中的逗号分隔字符串将单行拆分为多行?

我想拆分用逗号分隔的字符串并在 SQL Server 中另存为新行 [重复]