Oracle查询以标识具有特殊字符的列

时间:2014-08-04 08:12:33

标签: sql oracle

我试图写一个SQL查询来返回除了之外的其他行 alphabetsnumbersspacesfollowing chars '.', '{','[','}',']' 列包含Ÿ¿

等字母

例如: - 表格TEST有2列 - EmpNoSampleText EmpNo是简单序列,SampleText的值类似于

('12345abcde','abcdefghij','1234567890','ab c d 1 3','abcd$%1234','%^*&^%$#$%','% % $ #  %','abcd 12}34{','MINNEAŸPOLIS','THAN ¿VV ¿A')

我想写一个查询,它应该删除除.{[}]之外甚至只有一个特殊字符的所有行。在上面的示例中,它应该返回EmpNo - 1,2,3,4 and 8 我试过了REGEXP_LIKE,但我没有得到我需要的东西。

我使用的查询:

SELECT * FROM test 
WHERE REGEXP_LIKE(sampleText, '[^A-Z^a-z^0-9^[^.^{^}]' ,'x'); 

这并不是在忽视空白,我也需要忽略结束括号']'

4 个答案:

答案 0 :(得分:3)

你可以使用正则表达式,所以我认为这就是你想要的:

select t.*
from test t
where not regexp_like(sampletext, '.*[^a-zA-Z0-9 .{}\[\]].*')

答案 1 :(得分:1)

我找到了上述问题的答案。 下面的查询将返回甚至出现字符符号的行 字母,数字,方括号,花括号,s步速和点。 请注意,匹配模式中右括号']'的位置很重要。

右']'具有结束字符集定义的特殊含义。在指定任何成员之前结束集合是没有任何意义的,所以在方括号内指示文字右边']'的方法是将它放在左边'['开始设置定义

SELECT * FROM test WHERE REGEXP_LIKE(sampletext,  '[^]^A-Z^a-z^0-9^[^.^{^}^ ]' );

答案 2 :(得分:1)

它们的关键是反斜杠转义字符不能与字符类方括号内的右方括号一起使用(它被解释为字符类方括号内的文字反斜杠)。添加右方括号,在末尾加上OR,如下所示:

select EmpNo, SampleText
from test 
where NOT regexp_like(SampleText, '[ A-Za-z0-9.{}[]|]');

答案 3 :(得分:-1)

在Oracle中使用lengthB和length函数比较长度。

SELECT * FROM test WHERE长度(样本文本)<>长度b(样本文本)