首頁 > 資料庫 > 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 的MyORDER,你可能會遇到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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板