我有一个列值,例如'IC123456IC789123' 我想为此列创建两行
results
'IC123456'
'IC789123'
但如果它是重复的,它应该只创建一行
'IC123456IC123456'
'IC123456'
'IC123456'
results
'IC123456'
我试过了
REGEXP_SUBSTR('account','number','[^IC]',1,2] AS "PARTS"
但只给我没有“IC”的号码(我需要保留)。 另外,给他们一个新的列,但我想保留在“数字列”中 它还应该返回其中不包含“IC”的所有其他数字。
您可以使用 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;
假设您的值都是 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
不重复。