首页 >数据库 >mysql教程 >如何在 PostgreSQL 中复制 MySQL 的 ORDER BY FIELD() 函数?

如何在 PostgreSQL 中复制 MySQL 的 ORDER BY FIELD() 函数?

Barbara Streisand
Barbara Streisand原创
2024-12-07 10:02:12601浏览

How to Replicate MySQL's ORDER BY FIELD() Function in PostgreSQL?

在 Postgresql 中模拟 MySQL 的 ORDER BY FIELD()

从 MySQL 过渡到 PostgreSQL 时,开发人员可能会遇到 PostgreSQL 中缺少 ORDER BY FIELD() 函数的情况。此函数提供了一种根据指定值列表对记录进行排序的便捷方法。

问题陈述:

Rails 应用程序使用包含以下排序子句的 SQL:

SELECT * FROM `currency_codes` ORDER BY FIELD(code, 'GBP', 'EUR', 'BBD', 'AUD', 'CAD', 'USD') DESC, name ASC

此子句旨在根据指定的货币代码列表对记录进行排序,并按名称字段进行附加排序。但是,PostgreSQL 不支持此语法。

解决方案:

要在 PostgreSQL 中模拟 MySQL 的 ORDER BY FIELD() 的行为,可以使用以下组合CASE 语句和 ORDER BY 子句。具体方法如下:

SELECT * FROM currency_codes
ORDER BY
CASE
  WHEN code='USD' THEN 1
  WHEN code='CAD' THEN 2
  WHEN code='AUD' THEN 3
  WHEN code='BBD' THEN 4
  WHEN code='EUR' THEN 5
  WHEN code='GBP' THEN 6
  ELSE 7
END,
name;

在此方法中:

  • CASE 语句评估代码字段,并为 MySQL 中的 FIELD() 函数中列出的每种货币代码分配相应的优先级.
  • ORDER BY 子句使用此优先级首先对记录进行排序,然后根据名称进行排序

此方法提供了一种方便的方法来模拟 PostgreSQL 中 MySQL 的 ORDER BY FIELD() 的行为,并确保记录按需要排序。

以上是如何在 PostgreSQL 中复制 MySQL 的 ORDER BY FIELD() 函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn