Divida a string fornecida e prepare a instrução de caso

Mesa: Nome da tabela

create table table_name
(
given_dates timestamp,
set_name varchar
);

Inserção de registros:

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

Agora eu quero atualizar set_name para algumas datas.

Por exemplo:

Quero atualizar a tabela assim:

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: Ogiven_dates eset_name passam um parâmetro por serem dinâmicos. Posso passar 2 sets como mostrado acimas1,s2 ou pode passar 4 jogos de acordo com o requisito.

Então, eu preciso da declaração dinâmica de caso para atualizar oset_name.

Dados dois parâmetros:

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

declare p_sets varchar := 's1,s2';

Bem, eu posso fazer isso usando o seguinte script estático:

Declaração de atualização estática:

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;

A instrução de atualização acima faz o trabalho, mas estaticamente.

Como da mesma maneira para atualizar a tabela, quero preparar apenas a declaração de caso, que deve ser dinâmica e que pode mudar de acordo com os parâmetros(p_dates,p_sets) alterar.

Questões:

Como dividir as datas especificadasp_dates? (Eu tenhoto palavra-chave entre duas datas.)Como dividir os conjuntos fornecidosp_sets? (Eu tenho ',' vírgula entre dois nomes de conjunto.)Como preparar a declaração dinâmica de caso após dividir op_dates ep_sets?

Esta questão está relacionada aDeclaração dinâmica de caso usando o SQL Server 2008 R2, que é a mesma coisa, exceto para o Microsoft SQL Server.

questionAnswers(2)

yourAnswerToTheQuestion