首頁 >資料庫 >mysql教程 >如何在 PostgreSQL 中複製 MySQL 的 ORDER BY FIELD() 函數?

如何在 PostgreSQL 中複製 MySQL 的 ORDER BY FIELD() 函數?

Barbara Streisand
Barbara Streisand原創
2024-12-07 10:02:12624瀏覽

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

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

從MySQL 過渡到PostgreSQL 時,開發人員可能會遇到PostgreSQL 中缺少ORDER BYM函數的情況。此函數提供了一種根據指定值清單對記錄進行排序的便捷方法。

問題陳述:

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