Sql 用于标识具有特殊字符的列的Oracle查询

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'

我正在尝试编写一个SQL查询,以返回除
字母表
数字
空格
后面的字符“.”、“{”、“[”、“}”和“]”
列中有像
Ÿ

例如:-有一个表
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。