Diviser les chaînes données
Pour diviser les dates (p_dates) et les ensembles (p_sets) donnés, nous pouvons utiliser la fonction string_split() de Postgres. string_split() prend deux arguments : la chaîne d'entrée à diviser et un délimiteur.
SELECT string_split(p_dates, ','); SELECT string_split(p_sets, ',');
Cela renverra deux tableaux contenant les dates et les ensembles de fractionnement.
Préparation du cas dynamique Déclaration
Pour préparer une instruction de cas dynamique, nous pouvons parcourir les tableaux divisés et construire l'instruction à l'aide d'un CASE expression.
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;
Le CASE_STATEMENT résultant sera une expression de cas dynamique qui attribue des noms d'ensemble appropriés en fonction des plages de dates données.
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
Vous pouvez utiliser ce CASE_STATEMENT dynamique dans votre mise à jour. requête pour attribuer des noms d'ensemble en fonction des plages de dates et des noms d'ensemble donnés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!