Heim >Datenbank >MySQL-Tutorial >Wie simuliere ich die FIELD()-Funktion von MySQL in PostgreSQL?

Wie simuliere ich die FIELD()-Funktion von MySQL in PostgreSQL?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-08 01:38:11307Durchsuche

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

MySQL FIELD() in Postgresql simulieren

Die Konvertierung von MySQL zu PostgreSQL kann unvorhergesehene Herausforderungen mit sich bringen. Ein solches Problem ist die Simulation der ORDER BY FIELD()-Funktionalität, die in Postgresql nicht direkt unterstützt wird.

In MySQL weist die FIELD()-Funktion Werten in einer angegebenen Liste Ordinalpositionen zu und sortiert die Ergebnisse danach diese Positionen. Zum Beispiel die folgende Abfrage in MySQL:

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

sortiert die Tabelle „currency_codes“ basierend auf der in der FIELD()-Liste angegebenen Reihenfolge und dann alphabetisch nach Namen.

Um ein ähnliches Verhalten zu erreichen Postgresql können Sie eine CASE-Anweisung innerhalb der ORDER BY-Klausel verwenden:

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;

In dieser Abfrage weist die CASE-Anweisung Prioritätswerte zu (1-6) zu den Codes in der angegebenen Reihenfolge. Werte, die nicht in der Liste gefunden werden, erhalten eine Standardpriorität von 7. Die Ergebnisse werden dann in absteigender Reihenfolge der Priorität und aufsteigender Reihenfolge des Namens sortiert.

Das obige ist der detaillierte Inhalt vonWie simuliere ich die FIELD()-Funktion von MySQL in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn