我有一个列值,例如。'IC123456IC789123'。该值是来自不同系统的聚合,因此可以是数字或字母/数字的形式,没有固定的格式,例如921253 X4525186 IC 543534
在数字可以用于另一个联接之前,需要清理数据。这是一个一致的模式与一个特定的系统,似乎结合了两个数字,例如。带有IC前缀的示例
我需要为该列创建两行,但仅限于这种情况。其他数据应该传递,并且它们应该是不同的值(但在某些情况下,根据示例,它们在列中重复)
results
'IC123456'
'IC789123'
但如果是重复行,则只应创建一行
'IC123456IC123456'
'IC123456'
'IC123456'
results
'IC123456'
我试过REGEXP_SUBSTR('account','number','[^IC]',1,2) AS "PARTS"
但只给我没有“IC”的数字(我需要保留)。另外,在一个新的列上给出它们,但是我想在“number column”中保留,它还应该返回不包含“IC”的每一个其他数字。
2条答案
按热度按时间gr8qqesn1#
您可以使用Connect by子句通过IC关键字将字符串拆分为2行,然后使用distinct关键字获取唯一值-
Demo.
xyhw6mcr2#
假设你的值都是8个字符长(
IC
然后是6个数字),那么你可以使用简单的字符串函数(比正则表达式快得多)和递归子查询因子子句:如果你有可变长度的术语(都以
IC
开头),那么你可以用途:如果你有采用字母数字形式的可变长度项,那么你可以使用正则表达式:
或者,使用简单的字符串函数(这可能比正则表达式更容易输入,但可能更快):
其中,对于样本数据:
所有输出:
| ID|值|
| --|--|
| 1 |IC123456|
| 2 |IC123456|
| 1 |IC789123|
id = 2
不重复。*fiddle