2

这是 PostgreSQL 查询:

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

MySQL 搞砸了~*

MySQL 的等价物是什么?

4

2 回答 2

4

MySQL 使用RLIKEorREGEXP作为正则表达式比较运算符。

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() 值。

于 2013-10-08T18:28:32.677 回答
0

对 where 子句使用简单的 LIKE。

SELECT max(prefix) FROM rates where prefix LIKE '914428215151%'
于 2013-10-08T18:30:40.683 回答