gpt4 book ai didi

mysql - 将 postgresql 查询转换为适用于 mysql 的查询

转载 作者:行者123 更新时间:2023-11-29 01:41:46 31 4
gpt4 key购买 nike

这是 PostgreSQL 查询:

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

MySQL 在 ~* 上崩溃了

什么是 MySQL 的等价物?

最佳答案

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

参见 http://dev.mysql.com/doc/refman/5.6/en/regexp.html#operator_regexp

PostgreSQL 的~* 运算符不区分大小写,MySQL 也是如此:

REGEXP is not case sensitive, except when used with binary strings.

另一个区别是 || 用作字符串连接运算符。如果您 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() 值。

关于mysql - 将 postgresql 查询转换为适用于 mysql 的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19255441/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com