Sql 如何过滤重复项并消除字符串后出现的整数值

Sql 如何过滤重复项并消除字符串后出现的整数值,sql,oracle,Sql,Oracle,我正在尝试对下面的示例进行重复数据消除,并过滤下面字符串示例之后出现的任何数值 样本1 PRIMENOWTIPS CK4SH8WM PRIMENOWTIPS JE5EG59G PRIMENOWTIPS M66SC0B PRIME NOW MT7DY6XG PRIMENOWTIPS MA73V8VJ PRIME NOW MU5YY21L PRIME NOW MV52V1NP PRIMENOWMKTP 4Q1LS1Q PRIMENOWMKTP HU1V32M MYTAXI 1FJJVA MY CHR

我正在尝试对下面的示例进行重复数据消除,并过滤下面字符串示例之后出现的任何数值

样本1

PRIMENOWTIPS CK4SH8WM
PRIMENOWTIPS JE5EG59G
PRIMENOWTIPS M66SC0B
PRIME NOW MT7DY6XG
PRIMENOWTIPS MA73V8VJ
PRIME NOW MU5YY21L
PRIME NOW MV52V1NP
PRIMENOWMKTP 4Q1LS1Q
PRIMENOWMKTP HU1V32M
MYTAXI 1FJJVA
MY CHRONOTYPE
MY NAIL SALON
MYTAXI 1DCE
MYTAXI 1DCHV
MYTAXI 1JTCNM
输出

PRIMENOWTIPS
PRIME NOW
MYTAXI
MY CHRONOTYPE
MY NAIL SALON
   11THAVEAUTO
   10TO
   11BIGJIM
样本

  11THAVEAUTO123
  10TO12345
  11BIGJIM12345
  1234556788
  23456
预期产出

PRIMENOWTIPS
PRIME NOW
MYTAXI
MY CHRONOTYPE
MY NAIL SALON
   11THAVEAUTO
   10TO
   11BIGJIM
您可以使用regexp\u substr()完成大部分工作。虽然我不擅长,但我为您的两个数据集都找到了解决方案。对于sample1我添加了一个int类型的ID列以供进一步参考

第一场景: 首先,我找出哪些行有带数字的字符串。然后提取这些字符串并将其替换为零。 输入:

解决方案:

with cte as (    
    select id,regexp_substr(t,'[^" "]+', 1, level)t2 from test3
    connect by regexp_substr(t, '[^" "]+', 1, level) is not null
    ),
cte2 as ( select distinct id,t2 from cte
    where regexp_substr(t2, '[0-9].*') is not null
    )
    select test3.id,test3.t,replace(t,t2,'')as Transformed from test3 inner join cte2 on test3.id=cte2.id
    where regexp_substr(t2, '[0-9].*') is not null
    order by test3.id
select t,substr(t,1,instr(t,regexp_substr(t, '[A-Z].[0-9]'))+1)as Transformed  from test
where regexp_substr(t, '[A-Z].[0-9]') is not null;
结果:

第二场景: 输入:

解决方案:

with cte as (    
    select id,regexp_substr(t,'[^" "]+', 1, level)t2 from test3
    connect by regexp_substr(t, '[^" "]+', 1, level) is not null
    ),
cte2 as ( select distinct id,t2 from cte
    where regexp_substr(t2, '[0-9].*') is not null
    )
    select test3.id,test3.t,replace(t,t2,'')as Transformed from test3 inner join cte2 on test3.id=cte2.id
    where regexp_substr(t2, '[0-9].*') is not null
    order by test3.id
select t,substr(t,1,instr(t,regexp_substr(t, '[A-Z].[0-9]'))+1)as Transformed  from test
where regexp_substr(t, '[A-Z].[0-9]') is not null;
输出:

您在这里问了两个清理问题,您还没有明确说明我们知道如何识别要删除的内容。请纠正我对这些数据的挑战,并试图看看一些专家是否有任何想法。@stackuser您是否有每行的唯一标识符?是的,我有每行的唯一标识符关闭这些文本G93QZ10T、文本GE2KJ26S失败,文本GG0QU2KU。尾随字符串以char开头,而不是number。任何想法都会试图找出答案。你希望从这些产品中得到什么?