有没有更短的方法-SQL-多个LIKE和OR

时间:2018-09-29 00:10:52

标签: mysql sql postgresql

是否可以缩短这样的SQL语句?如果是这样,在MySQL和PostgreSQL中将是什么?

SELECT DISTINCT city FROM station 
WHERE (city LIKE 'A%' OR city LIKE 'E%' OR 
       city LIKE 'I%' OR city LIKE 'O%' OR city LIKE 'U%')
AND (city LIKE '%a' OR city LIKE '%e' OR city LIKE '%i' OR 
     city LIKE '%o' OR city LIKE '%u');

1 个答案:

答案 0 :(得分:6)

对于MySQL,我们可以使用正则表达式,如下所示:

WHERE city REGEXP '^[AEIOU].*[aeiou]$'

不必深入探讨正则表达式,而可以帮助解密:

  • 插入符号^与字符串的开头

  • 下一个字符必须是方括号AEIO或{{1 }}

  • 后跟任意数量的任意字符,点U与任意字符匹配,.是重复,零,一个或多个

  • 最后一个字符必须与方括号*aeio中的一个字符匹配。美元符号u与字符串的结尾


要进行测试,请使用SELECT语句

$

正如Gordon在评论中指出的那样,使用正则表达式比较的相同方法将在PostgreSQL中起作用。但是语法有点不同,比较操作是波浪号 SELECT t.city , t.city REGEXP '^[AEIOU].*[aeiou]$' FROM ( SELECT 'A' AS city UNION ALL SELECT 'Aa' UNION ALL SELECT 'Abba' UNION ALL SELECT 'a' ) t 字符,代替了MySQL ~REGEXP关键字。

RLIKE

https://www.postgresql.org/docs/current/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP