Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否有一种较短的方法-SQL-multiple LIKE and OR_Mysql_Sql_Postgresql - Fatal编程技术网

Mysql 是否有一种较短的方法-SQL-multiple LIKE and OR

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

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

在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
~
字符,代替MySQL
REGEXP
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
~
字符,代替MySQL
REGEXP
RLIKE
关键字

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

您使用的是MySQL还是PostgreSQL?它们不是同一件事,有不同的语法。请删除不适用于您的帖子的帖子。标签在这里有意义和相关性;请只使用那些真正适用于你的问题-不要随意选择听起来熟悉或相似的东西。谢谢。很抱歉造成混淆…我正在寻找MySQL和PostgreSQL的解决方案。您使用的是MySQL还是PostgreSQL?它们不是同一件事,有不同的语法。请删除不适用于您的帖子的帖子。标签在这里有意义和相关性;请只使用那些真正适用于你的问题-不要随意选择听起来熟悉或相似的东西。谢谢。很抱歉造成混淆…我正在寻找MySQL和PostgreSQL的解决方案。在Postgres中,您将使用
~
,而不是
REGEXP
。感谢您的参与。肯定有帮助。ThanksAs Gordon指出,同样的方法也适用于Postgres,但正则表达式比较运算符是一个
~
字符,代替MySQL
REGEXP
RLIKE
关键字。在Postgres中,你会使用
~
而不是
REGEXP
。我很感激你这么做。肯定有帮助。ThanksAs Gordon指出,同样的方法也适用于Postgres,但正则表达式比较运算符是一个
~
字符,代替MySQL
REGEXP
RLIKE
关键字。