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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage