Разбить заданную строку и подготовить оператор case

Таблица: table_name

create table table_name
(
given_dates timestamp,
set_name varchar
);

Вставка записей:

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

Теперь я хочу обновить set_name для некоторых дат.

Например:

Я хочу обновить таблицу следующим образом:

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

Заметка:given_dates а такжеset_name передают параметр, потому что они являются динамическими. Я могу пройти 2 сета, как показано вышеs1,s2 или может пройти 4 комплекта в соответствии с требованием.

Так что мне нужен динамический регистр для обновленияset_name.

Учитывая два параметра:

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

declare p_sets varchar := 's1,s2';

Ну, я могу сделать это с помощью следующего статического скрипта:

Статическое обновление:

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;

Приведенный выше оператор обновления выполняет свою работу, но статически.

Как и в случае обновления таблицы, я хочу подготовить только инструкцию case, которая должна быть динамической и может изменяться в соответствии с параметрами.(p_dates,p_sets) изменения.

Вопросы:

Как разделить данные даты, которыеp_dates? (Я имеюto ключевое слово между двумя датами.)Как разделить данные наборы,p_sets? (У меня есть запятая ',' между двумя set_names.)Как подготовить динамический регистр после разбиенияp_dates а такжеp_sets?

Этот вопрос относится кДинамический регистр с использованием SQL Server 2008 R2, что то же самое, но для Microsoft SQL Server.

Ответы на вопрос(2)

Ваш ответ на вопрос