Dividi la stringa data e prepara la dichiarazione del caso

Tabella : table_name

create table table_name ( given_dates timestamp, set_name varchar ); 

Inserimento di record :

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

Ora voglio aggiornare set_name per alcune date.

Ad esempio :

Voglio aggiornare la tabella in questo modo:

 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 

Nota : given_dates e set_name passano un parametro perché sono dinamici. Potrei passare 2 set come mostrato sopra s1,s2 o passare 4 set in base al requisito.

Quindi ho bisogno della dichiarazione case dynamic per aggiornare il set_name .

Dati due parametri :

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

Bene, posso farlo usando il seguente script statico:

Dichiarazione di aggiornamento statico :

 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; 

La precedente dichiarazione di aggiornamento fa il lavoro ma in modo statico.

Allo stesso modo di aggiornare la tabella, voglio preparare solo l’istruzione case che dovrebbe essere dynamic e che può cambiare in base ai cambiamenti dei parametri (p_dates,p_sets) .

Domande :

  1. Come dividere le date date che sono p_dates ? (Devo parola chiave tra due date.)
  2. Come dividere gli insiemi dati che sono p_sets ? (Ho ‘,’ una virgola tra due set_names.)
  3. Come preparare la dichiarazione case dynamic dopo aver diviso le p_dates e p_sets ?

Questa domanda si riferisce all’istruzione case dynamic utilizzando SQL Server 2008 R2 , che è la stessa cosa ma per Microsoft SQL Server.