以下是PostgreSQL查询:
SELECT *
FROM rates
WHERE prefix = (SELECT max(prefix)
FROM rates
where '914428215151' ~* ('^'||prefix));
MySQL在
~*
MySQL的等价物是什么?
最佳答案
MySQL使用RLIKE
或REGEXP
作为正则表达式比较运算符。
见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/