是否可以缩短这样的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');
答案 0 :(得分:6)
对于MySQL,我们可以使用正则表达式,如下所示:
WHERE city REGEXP '^[AEIOU].*[aeiou]$'
不必深入探讨正则表达式,而可以帮助解密:
插入符号^
与字符串的开头
下一个字符必须是方括号A
,E
,I
,O
或{{1 }}
后跟任意数量的任意字符,点U
与任意字符匹配,.
是重复,零,一个或多个
最后一个字符必须与方括号*
,a
,e
,i
,o
中的一个字符匹配。美元符号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