这是 PostgreSQL 查询:
SELECT *
FROM rates
WHERE prefix = (SELECT max(prefix)
FROM rates
where '914428215151' ~* ('^'||prefix));
MySQL 搞砸了~*
MySQL 的等价物是什么?
这是 PostgreSQL 查询:
SELECT *
FROM rates
WHERE prefix = (SELECT max(prefix)
FROM rates
where '914428215151' ~* ('^'||prefix));
MySQL 搞砸了~*
MySQL 的等价物是什么?
MySQL 使用RLIKE
orREGEXP
作为正则表达式比较运算符。
见http://dev.mysql.com/doc/refman/5.6/en/regexp.html#operator_regexp
PostgreSQL 的~*
运算符不区分大小写,MySQL 的也是:
REGEXP
不区分大小写,除非与二进制字符串一起使用。
另一个区别是||
用作字符串连接运算符。您可以让 MySQL 以相同的方式使用该运算符SET SQL_MODE=PIPES_AS_CONCAT
,但默认情况下它是一个逻辑“或”运算符,因此您应该使用以下CONCAT()
函数:
例子:
SELECT * FROM rates WHERE prefix = (
SELECT MAX(prefix) FROM rates
WHERE '914428215151' REGEXP CONCAT('^', prefix));
回复您的评论:
不要||
用作字符串连接。使用该CONCAT()
功能。
如果使用||
,它是一个逻辑“或”。的结果('^' OR prefix)
为true,在 MySQL 中用数字 1 表示。regexp 比较'914428215151' REGEXP '1'
显然匹配任何值,因此它返回表中的 MAX() 值。
对 where 子句使用简单的 LIKE。
SELECT max(prefix) FROM rates where prefix LIKE '914428215151%'