以下是PostgreSQL查询:

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

MySQL在~*
MySQL的等价物是什么?

最佳答案

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)的结果是真的,这由MySQL中的数字1表示。regexp比较'914428215151' REGEXP '1'显然匹配任何值,因此它返回表中的MAX()值。

关于mysql - 将Postgresql查询转换为适用于mysql的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19255441/

10-16 15:22
查看更多