Gegebene Zeichenfolge aufteilen und case-Anweisung vorbereiten

Tabell: Tabellennam

create table table_name
(
given_dates timestamp,
set_name varchar
);

Einfügung von Datensätzen:

insert into table_name values('2001-01-01'),('2001-01-05'),('2001-01-10'),
                 ('2001-01-15'),('2001-01-20'),('2001-01-25'),
                 ('2001-02-01'),('2001-02-05'),('2001-02-10'),
                 ('2001-02-15');

Jetzt möchte ich set_name für einige Daten aktualisieren.

Beispielsweis:

Ich möchte die Tabelle folgendermaßen aktualisieren:

given_dates    set_name 
----------------------
2001-01-01      s1
2001-01-05      s1
2001-01-10      s2
2001-01-15      s2
2001-01-20
2001-01-25
2001-02-01
2001-02-05
2001-02-10
2001-02-15

Hinwei: Dasgiven_dates undset_name Übergeben Sie einen Parameter, weil sie dynamisch sind. Ich kann 2 Sätze wie oben gezeigt übergebens1,s2 oder kann 4 Sätze je nach Anforderung bestehen.

So brauche ich die dynamische case-Anweisung zum Aktualisieren derset_name.

Gegeben zwei Parameter:

declare p_dates varchar := '2001-01-01to2001-01-05,2001-01-10to2001-01-15';

declare p_sets varchar := 's1,s2';

Nun kann ich das mit folgendem statischen Skript machen:

Static Update Anweisung:

update table_name
SET set_name = 
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 '' 
end;

Die obige Update-Anweisung erledigt die Aufgabe jedoch statisch.

Wie bei der Aktualisierung der Tabelle möchte ich nur die case-Anweisung vorbereiten, die dynamisch sein sollte und die sich gemäß den Parametern @ ändern kan(p_dates,p_sets) Änderungen

Frage:

So teilen Sie die angegebenen Daten auf, die @ sip_dates? (Ich habeto Schlüsselwort zwischen zwei Daten.)Wie man die angegebenen Mengen aufteilt, die @ sip_sets? (Ich habe ',' Komma zwischen zwei set_names.) So bereiten Sie eine dynamische case-Anweisung vor, nachdem Sie das @ geteilt habp_dates undp_sets?

Diese Frage bezieht sich aufDynamic case statement unter Verwendung von SQL Server 2008 R2, das ist das gleiche, aber für Microsoft SQL Server.