有没有一个更简短的方法-sql-像and或multiple

zqdjd7g9  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(206)

有没有办法缩短这样的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');
cpjpxq1n

cpjpxq1n1#

在mysql中,我们可以使用正则表达式,比如:

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

不要太深入地研究正则表达式,但要帮助您破译它:
插入符号 ^ 匹配字符串的开头
下一个字符必须是方括号中集合中的字符之一 A , E , I , O 或者 U 后跟任何字符的任何数字,点 . 匹配任何字符 * 是重复,零,一个或多个
最后一个字符必须与方括号中的一个字符匹配 a , e , i , o , u 因为美元符号 $ 匹配字符串的结尾
对于测试,请使用select语句

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

正如gordon在评论中指出的,使用正则表达式比较的方法在postgresql中也适用。但是语法有点不同,比较操作是一个颚化符 ~ 字符,代替mysql REGEXP 或者 RLIKE 关键字。

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

https://www.postgresql.org/docs/current/static/functions-matching.html#functions-posix正则表达式

相关问题