SQL Oracle 中的通配符

WILDCARDS in SQL Oracle

我试图在 Oracle 数据库中查找所有以 A、B 或 C 开头的名称,我编写了以下语法:

SELECT NUME FROM JUCATORI
WHERE NUME LIKE '[ABC]%';

但它没有给我任何名称(也没有错误),即使我确定我的数据库名称中有以 A、B 或 C 开头的名称。

一个选项是

where substr(nume, 1, 1) in ('A', 'B', 'C')

LIKE 不适用于字符集。 (我认为 T-SQL 扩展了 LIKE 来处理这样的表达式,但是 Oracle 的 SQL 没有。)你不会得到错误,因为 LIKE '[ABC]%' 寻找以左括号开头的字符串,然后是 A,然后是 B,然后是 C,然后是右括号

所以要么使用 OR:

SELECT nume FROM jucatori WHERE nume LIKE 'A%' OR nume LIKE 'B%' OR nume LIKE 'C%';

或正则表达式:

SELECT nume FROM jucatori WHERE REGEXP_LIKE(nume, '^[ABC]');

您将正则表达式与 'like' 条件混淆了。

Like 检查您传递给它的字符串,只有三个例外:

1. %    - any number of any characters
2. _    - any single character

3. ESCAPE clause that lets you define escape character 
so you can use %  as 'I'm looking for percent sign'

[ABC] 意思是 'either A, B or C' 是正则表达式语法。 您可能想改用 regexp_like,或者对于这种简单的查询,只需 'OR' 几个赞:

with examples as (
   select 'Adam' ex from dual union all
   select 'Dorothy' ex from dual union all
   select '[ABC]something' ex from dual union all
   select '[ABC]' from dual
)
select e.ex,
       case when e.ex like '[ABC]%' then 'MATCHES' else null end as matches_like,
       case when regexp_like(e.ex, '^[ABC].?') then 'MATCHES' else null end as matches_regexp_like,
       case when e.ex like 'A%' or e.ex like 'B%' or e.ex like 'C%' then 'MATCHES' else null end as matches_complex_like
  from examples e