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

如何在PostgreSQL中模拟MySQL的ORDER BY FIELD()?

DDD
发布: 2024-12-31 08:04:10
原创
317 人浏览过

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

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

作为一个迁移到 PostgreSQL 的 MySQL 用户,你可能会遇到 ORDER BY 的限制后者数据库不支持 FIELD() 语法。这就提出了如何在 PostgreSQL 中模拟其行为的问题。

问题:

MySQL 允许您使用 ORDER BY FIELD() 子句定义自定义顺序。它接受一个值和一系列期望值,查询结果按照提供的值的顺序排序。

例如:

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

此查询将优先考虑具有按顺序编码“GBP”、“EUR”、“BBD”、“AUD”、“CAD”和“USD”,同时进一步按升序对结果进行排序'name' 列。

解决方案:

在 PostgreSQL 中,您可以使用 CASE 语句的组合并按结果数值排序来实现类似的功能。

以下是如何模拟 ORDER BY FIELD() 的行为子句:

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 语句为“code”列的每个指定值分配一个数值 (1-6)。
  • 具有指定值的行按分配的值按数字顺序排序。
  • 如果“code”列值确实如此不匹配任何指定值,它将收到默认值 7。
  • 结果按“名称”列进一步按升序排序。

此技术允许您根据预定义的顺序对行进行优先级排序,提供与 MySQL ORDER BY FIELD() 子句的功能非常接近的功能。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板