这是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以相同的方式使用该运算符,但默认情况下它是一个逻辑"or"运算符,所以你应该使用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(( 值。
对 where 子句使用简单的 LIKE。
SELECT max(prefix) FROM rates where prefix LIKE '914428215151%'