oracle 从列中获取非重复字符[已关闭]

yrdbyhpb  于 2023-04-29  发布在  Oracle
关注(0)|答案(2)|浏览(114)

已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

8天前关闭
Improve this question
我需要写一个查询来从列中获取非重复字符。例如,列具有如下值

a
bb
ccc
d

输出应为

a
d

我想知道该如何构造查询。

5lwkijsr

5lwkijsr1#

这里有一个方法。

with tmp (str, new_str,iter) as (
      select '', 'abcdaeeebfghieejklca', 0 from dual
      union all
      select new_str, regexp_replace(new_str, '(.)(.*?)\1+', '\1\2'), iter + 1
      from tmp
      where str != new_str or iter = 0
    )
    select max(str) keep(dense_rank last order by iter) as str
    from tmp;
 
STR
------------
abcdefghijkl
goucqfw6

goucqfw62#

要查找所有字符只出现一次的字符串,可以使用正则表达式(.).*?\1查找具有重复字符的行并排除它们:

SELECT value
FROM   table_name
WHERE  NOT REGEXP_LIKE(value, '(.).*?\1');

其中,对于样本数据:

CREATE TABLE table_name (value) AS
  SELECT 'a' FROM DUAL UNION ALL
  SELECT 'bb' FROM DUAL UNION ALL
  SELECT 'ccc' FROM DUAL UNION ALL
  SELECT 'd' FROM DUAL UNION ALL
  SELECT 'abcd' FROM DUAL UNION ALL
  SELECT 'abcad' FROM DUAL;

输出:
| 价值|
| --------------|
| 一种|
| d|
| 阿拉伯基督教民主联盟|
fiddle

相关问题