Mysql 是否有一种较短的方法-SQL-multiple LIKE and OR
有没有办法缩短这样的SQL语句?如果是这样的话,MySQL和PostgreSQL中会是什么Mysql 是否有一种较短的方法-SQL-multiple LIKE and OR,mysql,sql,postgresql,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 c
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');
在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。但是语法有点不同,比较操作是一个tilde
~
字符,代替MySQLREGEXP
或RLIKE
关键字
WHERE city ~ '^[AEIOU].*[aeiou]$'
对于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。但是语法有点不同,比较操作是一个tilde
~
字符,代替MySQLREGEXP
或RLIKE
关键字
WHERE city ~ '^[AEIOU].*[aeiou]$'
您使用的是MySQL还是PostgreSQL?它们不是同一件事,有不同的语法。请删除不适用于您的帖子的帖子。标签在这里有意义和相关性;请只使用那些真正适用于你的问题-不要随意选择听起来熟悉或相似的东西。谢谢。很抱歉造成混淆…我正在寻找MySQL和PostgreSQL的解决方案。您使用的是MySQL还是PostgreSQL?它们不是同一件事,有不同的语法。请删除不适用于您的帖子的帖子。标签在这里有意义和相关性;请只使用那些真正适用于你的问题-不要随意选择听起来熟悉或相似的东西。谢谢。很抱歉造成混淆…我正在寻找MySQL和PostgreSQL的解决方案。在Postgres中,您将使用
~
,而不是REGEXP
。感谢您的参与。肯定有帮助。ThanksAs Gordon指出,同样的方法也适用于Postgres,但正则表达式比较运算符是一个~
字符,代替MySQLREGEXP
或RLIKE
关键字。在Postgres中,你会使用~
而不是REGEXP
。我很感激你这么做。肯定有帮助。ThanksAs Gordon指出,同样的方法也适用于Postgres,但正则表达式比较运算符是一个~
字符,代替MySQLREGEXP
或RLIKE
关键字。