從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;
在此方法中:
此方法提供了一種方便的方法來模擬PostgreSQL 中MySQL 的ORDER BY FIELD() 的行為,並確保記錄按需要排序。
以上是如何在 PostgreSQL 中複製 MySQL 的 ORDER BY FIELD() 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!