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, ',');
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;
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
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!