我希望从这个专栏中获取具有各种特殊字符的数据。
特殊字符如下:
& * , . : ; ` ~ ¿ Ä Å Ç É Ñ Ö Ü ß à á
â ä å ç è é ê ë ì í î ï ñ ò ó ô ö ù ú
û ü ÿ ƒ α
我正在运行以下查询,但没有结果:
select A.Street
from ADRC a
where A.Street like not LIKE '%[^A-Za-z0-9, ]%'
从
获取上述结果select A.Street
from ADRC a
当我运行like子句时,我没有得到结果。
答案 0 :(得分:1)
在Oracle中,您可以使用REGEXP_LIKE
来获取包含至少一个“特殊”字符的任何记录:
select a.street
from adrc a
where REGEXP_LIKE (a.street, '[^A-Za-z0-9, ]');
答案 1 :(得分:1)
一些选项:
Oracle 11g R2架构设置:一些每行1个字符的测试数据:
CREATE TABLE table1 ( a ) AS
SELECT SUBSTR( value, LEVEL, 1 )
FROM (
SELECT '&*,.:;`~¿ÄÅÇÉÑÖÜßàáâäåçèéêëìíîïñòóôöùúûüÿƒα'
|| 'abcdefghijklmnopqrstuvwxyz'
|| 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|| '0123456789' AS value
FROM DUAL
)
CONNECT BY LEVEL <= LENGTH( value );
查询1 :
天真地说,如果你想只匹配特定的字符,那么你可以枚举你想要在正则表达式中匹配的所有字符:
'[&*,.:;`~¿ÄÅÇÉÑÖÜßàáâäåçèéêëìíîïñòóôöùúûüÿƒα]'
例如 - 这会列出所有匹配的字符(为了紧凑而聚合成一行):
SELECT LISTAGG( a, '' ) WITHIN GROUP ( ORDER BY ROWNUM ) AS matches
FROM table1
WHERE REGEXP_LIKE( a, '[&*,.:;`~¿ÄÅÇÉÑÖÜßàáâäåçèéêëìíîïñòóôöùúûüÿƒα]' )
<强> Results 强>:
| MATCHES |
|---------------------------------------------|
| &*,.:;`~¿ÄÅÇÉÑÖÜßàáâäåçèéêëìíîïñòóôöùúûüÿƒα |
查询2 :
如果你知道你不想匹配的字符,那么你可以否定模式[^characters to not match]
以找出是否还有其他字符:
例如:
SELECT LISTAGG( a, '' ) WITHIN GROUP ( ORDER BY ROWNUM ) AS matches
FROM table1
WHERE REGEXP_LIKE( a, '[^a-z0-9, ]', 'i' )
<强> Results 强>:
| MATCHES |
|--------------------------------------------|
| &*.:;`~¿ÄÅÇÉÑÖÜßàáâäåçèéêëìíîïñòóôöùúûüÿƒα |
查询3 :
如果你没有简单的表达式,你可以否定,但是,想要匹配相当于基本字母的字符,那么你可以使用[=a=]
来匹配a
,à
,á
,â
,ä
或å
并提供正则表达式,如:
[[:punct:][=a=][=c=][=e=][=i=][=n=][=o=][=u=][=y=]α߃]
例如:
SELECT LISTAGG( a, '' ) WITHIN GROUP ( ORDER BY ROWNUM ) AS matches
FROM table1
WHERE REGEXP_LIKE( a, '[[:punct:][=a=][=c=][=e=][=i=][=n=][=o=][=u=][=y=]α߃]', 'i' )
<强> Results 强>:
| MATCHES |
|-------------------------------------------------------------|
| &*,.:;`~¿ÄÅÇÉÑÖÜßàáâäåçèéêëìíîïñòóôöùúûüÿƒαaceinouyACEINOUY |
查询4 :
但是这也与基本字符匹配,所以我们可以否定前一个匹配并使用REGEXP_REPLACE
去除不匹配的字符,然后测试是否存在非基本字符:
SELECT LISTAGG( a, '' ) WITHIN GROUP ( ORDER BY ROWNUM ) AS matches
FROM table1
WHERE REGEXP_LIKE(
REGEXP_REPLACE(
a,
'[^[:punct:][=a=][=c=][=e=][=i=][=n=][=o=][=u=][=y=]α߃]'
),
'[^a-z]',
'i'
)
<强> Results 强>:
| MATCHES |
|---------------------------------------------|
| &*,.:;`~¿ÄÅÇÉÑÖÜßàáâäåçèéêëìíîïñòóôöùúûüÿƒα |