Heim > Datenbank > MySQL-Tutorial > Wie generiert man dynamisch eine CASE-Anweisung in Postgres für die datumsbasierte Mengenzuweisung?

Wie generiert man dynamisch eine CASE-Anweisung in Postgres für die datumsbasierte Mengenzuweisung?

Barbara Streisand
Freigeben: 2025-01-04 17:33:40
Original
825 Leute haben es durchsucht

How to Dynamically Generate a CASE Statement in Postgres for Date-Based Set Assignment?

Gegebene Strings aufteilen

Um die gegebenen Daten (p_dates) und Mengen (p_sets) aufzuteilen, können wir die Funktion string_split() von verwenden Postgres. string_split() benötigt zwei Argumente: die zu teilende Eingabezeichenfolge und ein Trennzeichen.

SELECT string_split(p_dates, ',');
SELECT string_split(p_sets, ',');
Nach dem Login kopieren

Dadurch werden zwei Arrays mit den Teilungsdaten und -sätzen zurückgegeben.

Dynamischer Fall wird vorbereitet Anweisung

Um eine dynamische Case-Anweisung vorzubereiten, können wir die geteilten Arrays durchlaufen und die Anweisung mithilfe eines CASE erstellen Ausdruck.

DECLARE
  p_dates TEXT := '2001-01-01to2001-01-05,2001-01-10to2001-01-15';
  p_sets TEXT := 's1,s2';
  CASE_STATEMENT TEXT := 'CASE ';
BEGIN
  FOR p_date IN SELECT * FROM string_split(p_dates, ',') LOOP
    CASE_STATEMENT := CASE_STATEMENT || 'WHEN given_dates BETWEEN ' || quote_literal(p_date) || ' ' || ...
  END LOOP;

  FOR p_set IN SELECT * FROM string_split(p_sets, ',') LOOP
    CASE_STATEMENT := CASE_STATEMENT || 'THEN ' || quote_literal(p_set) || ' '
  END LOOP;
  
  -- Complete Case Statement with ELSE clause to assign NULL if no match
  CASE_STATEMENT := CASE_STATEMENT || 'ELSE NULL' || ' END';
END;
SELECT CASE_STATEMENT;
Nach dem Login kopieren

Der resultierende CASE_STATEMENT ist ein dynamischer Fallausdruck, der entsprechende Satznamen basierend auf den angegebenen Datumsbereichen zuweist.

CASE 
  WHEN given_dates BETWEEN '2001-01-01' AND '2001-01-05' THEN 's1' 
  WHEN given_dates BETWEEN '2001-01-10' AND '2001-01-15' THEN 's2' 
  ELSE NULL 
END
Nach dem Login kopieren

Sie können diesen dynamischen CASE_STATEMENT in Ihrem Update verwenden Abfrage zum Zuweisen von Set-Namen gemäß den angegebenen Datumsbereichen und Set-Namen.

Das obige ist der detaillierte Inhalt vonWie generiert man dynamisch eine CASE-Anweisung in Postgres für die datumsbasierte Mengenzuweisung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage