【问题标题】:Translate this MySQL query to PyGreSQL将此 MySQL 查询转换为 PyGreSQL
【发布时间】:2011-03-28 13:14:19
【问题描述】:

我正在开发一个使用 mysql 函数 XOR (^) 和 BIT_COUNT() 的 Ruby 应用程序。但是我现在需要在运行 PyGreSQL 的 Heroku 上运行该应用程序。

我找不到任何可以帮助我的 PyGreSQL 文档。

那么任何人都可以翻译这个 mysql 查询,以便它在 pygresql 数据库上执行时可以工作吗?

SELECT * FROM "photos" WHERE BIT_COUNT(phash ^ 2061756291569501157) <= 15

pygresql 给了我错误

ERROR:  operator does not exist: text ^ bigint

谢谢。

【问题讨论】:

  • # 是按位异或。 (请参阅postgresql.org/docs/7.4/static/functions-math.html)我不确定bit_count() 是否完全平行。
  • 有用的提示:将其称为PostgreSQL。 PyGreSQL 只是 Postgres 的 Python 模块。除非该模块有特定内容,否则您会从 Postgres 用户那里获得更多帮助。对于 Perl,相同的用户不会将其称为 DBD::Pg,除非问题与该模块有关,而不是与底层的 db/query 有关。
  • phash 似乎也是一个文本字段。

标签: mysql sql postgresql


【解决方案1】:
SELECT  *
FROM    photos
WHERE   (
        SELECT  SUM(((phash::bigint # 2061756291569501157) >> bit) & 1)
        FROM    generate_series(0, 63) bit
        ) <= 15

【讨论】:

  • 如果我进行异或运算的整数是 BIGINT UNSIGNED (> 0,
  • @Shea:不幸的是,PostgreSQL 不支持无符号类型。您可以通过这种方式检查最后的63 位,并添加一个额外的条件来检查符号。
猜你喜欢
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 2014-01-06
  • 1970-01-01
  • 2021-06-23
  • 2022-01-15
相关资源
最近更新 更多