Maison > base de données > tutoriel mysql > Comment générer dynamiquement une instruction CASE dans Postgres pour l'attribution d'un ensemble basé sur la date ?

Comment générer dynamiquement une instruction CASE dans Postgres pour l'attribution d'un ensemble basé sur la date ?

Barbara Streisand
Libérer: 2025-01-04 17:33:40
original
792 Les gens l'ont consulté

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

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, ',');
Copier après la connexion

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;
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal