这是PostgreSQL查询:
SELECT *
FROM rates
WHERE prefix = (SELECT max(prefix)
FROM rates
where '914428215151' ~* ('^'||prefix));
MySQL在~*
MySQL的等价物是什么?
答案 0 :(得分:4)
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)
的结果是 true ,它由MySQL中的数字1表示。正则表达式比较'914428215151' REGEXP '1'
显然匹配任何值,因此它返回表中的MAX()值。
答案 1 :(得分:0)
对where子句使用简单的LIKE。
SELECT max(prefix) FROM rates where prefix LIKE '914428215151%'