SQL中的NOT LIKE IN语句[重复]
Posted
技术标签:
【中文标题】SQL中的NOT LIKE IN语句[重复]【英文标题】:NOT LIKE IN statement in SQL [duplicate] 【发布时间】: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');
我出错了。
【问题讨论】:
看看***.com/questions/3014940/… 【参考方案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]$)
- 要么只有一个字符(在第一步匹配)要么以元音结尾。
【讨论】:
以上是关于SQL中的NOT LIKE IN语句[重复]的主要内容,如果未能解决你的问题,请参考以下文章
C# 中的日期时间与 SQL Server 中的 SQL 和 GETDATE()
标准 sql 中的 bigquery 旧版 sql POSITION() 函数
sql (SSMS) 中的 CONVERT 函数是不是可以替换为 Pyspark.sql 中的类似函数。换句话说,有没有类似的功能?