SQL Oracle 如何将文本拆分成行并保留分隔符但不重复

问题描述 投票:0回答:2

我有一个列值,例如'IC123456IC789123' 我想为此列创建两行

results
'IC123456'
'IC789123'

但如果它是重复的,它应该只创建一行

'IC123456IC123456'
'IC123456'
'IC123456'
results 
'IC123456'

我试过了

REGEXP_SUBSTR('account','number','[^IC]',1,2] AS "PARTS"

但只给我没有“IC”的号码(我需要保留)。 另外,给他们一个新的列,但我想保留在“数字列”中 它还应该返回其中不包含“IC”的所有其他数字。

sql oracle split substr
2个回答
0
投票

您可以使用 Connect by 子句通过 IC 关键字将字符串拆分为 2 行,然后使用 unique 关键字来获取唯一值 -

select distinct 'IC' || trim(regexp_substr(value,'[^IC]+', 1, level) ) value
  from your_table
   connect by regexp_substr(value, '[^IC]+', 1, level) is not null;

演示。


0
投票

假设您的值都是 8 个字符长(

IC
然后是 6 位数字),那么您可以使用简单的字符串函数(比正则表达式快得多):

WITH rsqfc (id, value, idx) AS (
  SELECT id, value, 1 FROM table_name
UNION ALL
  SELECT id, value, idx + 1 FROM rsqfc WHERE idx + 1 <= LENGTH(value)/8
)
SELECT DISTINCT
       id,
       SUBSTR(value, 8*idx - 7, 8) AS value
FROM   rsqfc

对于样本数据:

CREATE TABLE table_name (id, value) AS
SELECT 1, 'IC123456IC789123' FROM DUAL UNION ALL
SELECT 2, 'IC123456IC123456' FROM DUAL;

输出:

身份证 价值
1 IC123456
2 IC123456
1 IC789123

注意:

id = 2
不重复。

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.