在 Postgresql 中模擬 MySQL FIELD()
從 MySQL 轉換到 PostgreSQL 可能會帶來不可預見的挑戰。其中一個問題是模擬 ORDER BY FIELD() 功能,Postgresql 中不直接支援該功能。
在 MySQL 中,FIELD() 函數將序數位置指派給指定清單中的值,並根據這些職位。例如,MySQL 中的以下查詢:
SELECT * FROM `currency_codes` ORDER BY FIELD(code, 'GBP', 'EUR', 'BBD', 'AUD', 'CAD', 'USD') DESC, name ASC
根據FIELD()清單中指定的順序對currency_codes表進行排序,然後按名稱的字母順序排序。
要實現類似的行為Postgresql,您可以在ORDER BY 子句中使用CASE 語句:
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 語句分配按指定順序將優先權值( 1-6) 分配給代碼。清單中未找到的值的預設優先權為 7。然後,結果按優先順序和名稱升序排序。
以上是如何在PostgreSQL中模擬MySQL的FIELD()函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!