如何从 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 ==> abcdeXCSDA
,但aabbccddeeaaXCSDA ==> abcdeXCSD
)。我认为您必须将<
更改为<=
,这样它就不会剪切最后一个字符。
是否每个人都对第一个解决方案投了赞成票,甚至费心用不同的字符串对其进行测试?它失败得很惨。将 D 扔到中间,它仍然返回 CX。在开头放一个 D 并返回 DC。如果可以的话,我会对此投反对票。以上是关于如何从 Oracle 中的字符串中获取唯一字符?的主要内容,如果未能解决你的问题,请参考以下文章