如何从 Oracle 中的字符串中获取唯一字符?

Posted

技术标签:

【中文标题】如何从 Oracle 中的字符串中获取唯一字符?【英文标题】:How can I get the unique characters from a string in Oracle? 【发布时间】:2011-08-29 05:09:41 【问题描述】:

如何从Oracle中的字符串中获取唯一字符?

假设我有一列包含数据

CCCXXXCCCCCCCCCCCCCCCCXXCCCCCCCCCCCCCCCCCCCCCCC

我想返回 'CX' 作为唯一字符列表。

同样:aaaabbbccccdddaaa ==> abcd , HelloO ==> HeloO

顺序很重要,我希望它们与第一次出现在字符串中的顺序相同。

有什么方法可以不使用存储过程吗?

编辑:添加更多示例

【问题讨论】:

您询问了 character 但给出了 2 个字符作为结果示例。 你真的不应该这样做。如果您曾经发现自己操作的内容小于完整的列,那么您几乎肯定做错了(效率会受到影响)。 真正的用例是什么? @zerkms,我已经编辑了这个问题,希望它更清楚。我认为需要的是字符串中唯一字符的列表,按照它们第一次出现的顺序。 我想如果它允许像java写的用户定义函数,那么没有任何困难。 【参考方案1】:
SELECT SUBSTR(REGEXP_SUBSTR('CCCCXXXCCCCCCCCCCCCCCCCXXCCCCCCCCCCCCCCCCCCCCCCC', '^(.)\1*.'), -2, 2) RESULT
FROM DUAL;

它返回CX

这是另一个解决方案:

Select Replace (Wm_Concat (C), ',', '')
From
  (Select Substr ('CCCXCCCXXXCCCCCCCCCCCCCCCCXXCCCCCCCCCCCCCCCC', Rownum, 1) C,
    Min (Rownum) Rn
  From Dual
    Connect By Rownum <= Length ( 'CCCXCCCXXXCCCCCCCCCCCCCCCCXXCCCCCCCCCCCCCCCC')
  Group By Substr ( 'CCCXCCCXXXCCCCCCCCCCCCCCCCXXCCCCCCCCCCCCCCCC', Rownum, 1)
  Order By Rn
  ) X;

它按出现的顺序返回所有唯一字符。顺便说一句,是的,它看起来很糟糕

【讨论】:

REGEXP_SUBSTR 在这种情况下如何计算结果?这里使用的正则表达式非常棒。 太棒了!如果可以的话,我会+2。 :-) 更新了问题,正则表达式并没有真正工作(你的子字符串,所以它只显示最后 2 个字符),第二个查询正在工作,但如果最后一个字符不重复,它将切断最后一个字符(aabbccddeeaaXCSDAA ==&gt; abcdeXCSDA,但aabbccddeeaaXCSDA ==&gt; abcdeXCSD)。我认为您必须将&lt; 更改为&lt;=,这样它就不会剪切最后一个字符。 是否每个人都对第一个解决方案投了赞成票,甚至费心用不同的字符串对其进行测试?它失败得很惨。将 D 扔到中间,它仍然返回 CX。在开头放一个 D 并返回 DC。如果可以的话,我会对此投反对票。

以上是关于如何从 Oracle 中的字符串中获取唯一字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 oracle 查询中获取字符串的第一行?

如何将字符串空格分隔的键,唯一字的值对转换为字典

如何使用批处理脚本从文本文件中获取唯一字符串

从文本字符串中获取字符串的唯一计数

SQL中字符串的连接

如何从 Oracle 表中获取几乎匹配的字符串?