将postgresql查询转换为适用于mysql的内容

时间:2013-10-08 18:26:21

标签: mysql regex postgresql

这是PostgreSQL查询:

SELECT * 
FROM rates 
WHERE prefix = (SELECT max(prefix) 
                FROM rates 
                where '914428215151' ~* ('^'||prefix));

MySQL在~*

上疯狂

MySQL的等价物是什么?

2 个答案:

答案 0 :(得分:4)

MySQL使用RLIKEREGEXP作为正则表达式比较运算符。

请参阅http://dev.mysql.com/doc/refman/5.6/en/regexp.html#operator_regexp

PostgreSQL的~*运算符不区分大小写,MySQL也是如此:

  

REGEXP不区分大小写,除非与二进制字符串一起使用。

另一个区别是||作为字符串连接运算符的用法。如果你SET SQL_MODE=PIPES_AS_CONCAT,你可以让MySQL以相同的方式使用那个运算符,但默认情况下它是一个逻辑“或”运算符,所以你应该使用CONCAT()函数:

示例:

SELECT * FROM rates WHERE prefix = (
  SELECT MAX(prefix) FROM rates 
  WHERE '914428215151' REGEXP CONCAT('^', prefix));

重新评论:

不要将||用作字符串连接。使用CONCAT()功能。

如果您使用||,则它是合乎逻辑的“或”。 ('^' OR prefix)的结果是 true ,它由MySQL中的数字1表示。正则表达式比较'914428215151' REGEXP '1'显然匹配任何值,因此它返回表中的MAX()值。

答案 1 :(得分:0)

对where子句使用简单的LIKE。

SELECT max(prefix) FROM rates where prefix LIKE '914428215151%'