如何在 PostgreSQL 中编写这个 MySQL 位?

Posted

技术标签:

【中文标题】如何在 PostgreSQL 中编写这个 MySQL 位?【英文标题】:How to write this MySQL bit in PostgreSQL? 【发布时间】:2012-11-10 10:59:50 【问题描述】:

我在看这个tidbit from MaxMind

SELECT ip_country
FROM geoip
WHERE
INET_ATON('xxx.xx.xxx.xxx') BETWEEN begin_ip_num AND end_ip_num
LIMIT 1

我尝试了几种方法,但 BETWEEN 似乎不像我认为它在 postgresql 中那样做。

如您所见,我正在尝试根据 IP 确定国家/地区。这里有几行,以防万一这可以更容易地完成:

"223.204.0.0","223.207.255.255","3754688512","3754950655","TH","泰国""223.208.0.0","223.215.255.255","3754950656","3755474943", "CN","中国" "223.216.0.0","223.219.255.255","3755474944","3755737087","JP","日本"

postgres 版本是 9.1 - 忘记添加了。

【问题讨论】:

不言而喻,我们需要表定义来确定。在使用时添加您的 PostgreSQL 版本。 【参考方案1】:

数据类型inet 可能会解决您的问题。只要列类型是textvarchar,数据就会根据您的collation 像文本一样排序——这也会影响BETWEEN

还取决于 PostgreSQL 的版本(排序规则支持是后期添加的)。只要您不提供基本信息,这都是猜测。

【讨论】:

以上是关于如何在 PostgreSQL 中编写这个 MySQL 位?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby 中使用 Where 子句 (PostgreSQL) 中的变量编写查询

在 PostgreSQL 中编写函数时出错

如何运行从 postgresql 中的函数生成的查询

如何在 PostgreSQL 8.3 中执行窗口函数

如何使用 SQLAlchemy 创建一个不是主键的标识列?

如何在 PostgreSQL 中插入多行