Sql 用于标识具有特殊字符的列的Oracle查询
我正在尝试编写一个SQL查询,以返回除Sql 用于标识具有特殊字符的列的Oracle查询,sql,oracle,Sql,Oracle,我正在尝试编写一个SQL查询,以返回除 字母表,数字,空格和后面的字符“.”、“{”、“[”、“}”和“]” 列中有像Ÿ,? 例如:-有一个表TEST,有两列-EmpNo和SampleText EmpNo是一个简单的序列,SampleText的值如下 ('12345abcde','abcdefghij','1234567890','ab c d 1 3','abcd$%1234','%^*&^%$#$%','% % $ # %','abcd 12}34{','MINNEAŸPOLIS'
字母表
,数字
,空格
和后面的字符“.”、“{”、“[”、“}”和“]”
列中有像Ÿ
,?
例如:-有一个表TEST
,有两列-EmpNo
和SampleText
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和8
我像一样尝试了REGEXP\u,但我没有得到我所需要的
我使用的查询:
SELECT * FROM test
WHERE REGEXP_LIKE(sampleText, '[^A-Z^a-z^0-9^[^.^{^}]' ,'x');
这不是忽略空格,我还需要忽略右括号“]”您可以使用正则表达式,因此我认为这就是您想要的:
select t.*
from test t
where not regexp_like(sampletext, '.*[^a-zA-Z0-9 .{}\[\]].*')
我找到了上述问题的答案。
下面的查询将返回的行中除了
字母表、数字、方括号、花括号、s步和点。
请注意,右括号“]”在匹配图案中的位置很重要
右“]”具有结束字符集定义的特殊含义。在指定任何成员之前结束集合没有任何意义,因此在方括号内指示文本右']'的方法是将其放在启动集合定义的左'['之后
SELECT * FROM test WHERE REGEXP_LIKE(sampletext, '[^]^A-Z^a-z^0-9^[^.^{^}^ ]' );
关键是反斜杠转义字符不能与字符类方括号内的右方括号一起使用(它被解释为字符类方括号内的文字反斜杠)。在右方括号末尾添加OR,如下所示:
select EmpNo, SampleText
from test
where NOT regexp_like(SampleText, '[ A-Za-z0-9.{}[]|]');
在oracle中使用lengthB和length函数比较长度
从测试中选择*长度(sampletext)lengthb(sampletext)它不起作用。但是,thsi在很大程度上起到了作用。从测试中选择*长度(sampletext,[^a-Z^a-Z^0-9^[^.^{^}^^^])无法排除]虽然有时,您可能需要使用两个反斜杠来转义字符,这取决于您连接到数据库的方式。不幸的是,我认为这并不能实现询问者的目标。对于这个问题,即使像$
这样的字符也算作特殊字符,但是长度('foobar$')
和长度('foobar$'))
两者都返回7
。考虑到问题的标题“Oracle查询以识别具有特殊字符的列”,我认为这个答案是最好的。这就是我需要的。谢谢Raj Ratan。