【问题标题】:NOT LIKE IN statement in SQL [duplicate]SQL中的NOT LIKE IN语句[重复]
【发布时间】:2017-08-10 13:28:01
【问题描述】:

我需要打印不以元音开头和结尾的名称。我试过这样:

SELECT DISTINCT name FROM people WHERE
lower(name) NOT LIKE IN ('a','e','i','o','u')%('a','e','i','o','u');

我出错了。

【问题讨论】:

标签: sql oracle


【解决方案1】:

在大型数据集的情况下,出于性能原因,您可能希望尽量避免使用REGEXP。

在这种情况下是TRANSLATE你的朋友。

1) 将所有元音翻译成一个代表

2) 使用所选元音执行正常的 LIKE 谓词

select txt from tab1
where translate(lower(txt),'aeiou','aaaaa') not like 'a%a';

REGEXP 非常强大,但不应该用于重要的数据集,以防它们可以避免。 (我的 8M 行测试数据给出了使用 TRANSLATE 的 7 秒与使用 REGEXP 的 2 分钟以上)。

【讨论】:

    【解决方案2】:

    您可以使用regexp_like 和匹配参数i 进行不区分大小写的匹配:

    select distinct name from people
    where not regexp_like(name, '^[aeiou]($|.*[aeiou]$)', 'i');
    

    图案细节:

    • ^[aeiou] - 以元音开头
    • ($|.*[aeiou]$) - 要么只有一个字符(在第一步匹配)要么以元音结尾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 2012-10-17
      • 1970-01-01
      相关资源
      最近更新 更多