oracle SQL REGEXP_LIKE显示包含特殊字符(不包括空格)的数据

dsekswqp  于 2023-01-12  发布在  Oracle
关注(0)|答案(2)|浏览(331)

我正在尝试创建一个查询,希望在其中查找包含以下所示数字的任何字符串

REGEXP_LIKE (name, '[0-9]$')

我还想显示包含任何特殊字符的名称,不包括空格(空格是有效的),我也希望这是从上面显示的数字例子分开。
字符串中要检查的字符

`~!@#$%^&*()_-+=?/\|][{}"':;><.,

下面不起作用

REGEXP_LIKE( name, '[!#$%&()*+,\-./:;<=>?@[\\\]^`{|}~]' )

然而我似乎不能让它工作,任何帮助将是伟大的。

iezvtpos

iezvtpos1#

可以使用“翻译”命令删除字符。

CREATE TABLE t (name) AS
SELECT 'Hello World' FROM DUAL UNION ALL
SELECT 'Acx÷×' FROM DUAL UNION ALL
SELECT '123 456 789' FROM DUAL UNION ALL
SELECT '~!@#$%Xxv^&*()_+=\sv{}[]:”;’<,>./?' FROM DUAL

SELECT TRANSLATE(name, '~!@÷*#$%^&*()_+=\{}[]:”;’<,>./?',' ') as no_special_char
FROM t;

NO_SPECIAL_CHAR
Hello World
Acx×
123 456 789
 Xxvsv
ajsxfq5m

ajsxfq5m2#

使用WITH子句是设置测试数据的一种好方法,并且使尝试不同的测试字符串变得真实的容易。可以将其视为临时表。第一个regexp_like()测试字符串末尾的数字。请参见下面测试字符串中任意位置的数字。使用posix regex简写[[:punct:]]匹配标点字符。我只是将所有示例合并到下面的一个查询中。

with tbl(id, str) as (
  select 1, 'test' from dual union all
  select 2, 'test 1 test' from dual union all
  select 3, 'test 2' from dual union all
  select 4, '3 test' from dual union all
  select 5, '4 ` test' from dual union all
  select 6, 'test ~ test' from dual
)
select id, str
from tbl
where regexp_like(str, '[0-9]$') -- ends in a number
or regexp_like(str, '\d') -- contains a number anywhere
or regexp_like(str, '[[:punct:]]'); -- contains a punctuation character anywhere

        ID STR        
---------- -----------
         2 test 1 test
         3 test 2     
         4 3 test     
         5 4 ` test   
         6 test ~ test

5 rows selected.

相关问题