У меня есть строка, которую нужно вставить в таблицу после извлечения из нее значений. Пример строки выглядит так:
111111,1111,11.11,'2019-01-01-11.11.11.111111'#222222,2222,22.22,'2019-02-02-22.22.22.222222'
Используя string_split
, я могу разбить значения на разные строки:
declare @s varchar(1000)
set @s = '111111,1111,11.11,''2019-01-01-11.11.11.111111''#222222,2222,22.22,''2019-02-02-22.22.22.222222'''
select value from string_split(@s, '#')
--Output
--111111,1111,11.11,'2019-01-01-11.11.11.111111'
--222222,2222,22.22,'2019-02-02-22.22.22.222222'
Становится интересно.
Вывод необходимо вставить в таблицу. Я думал о динамическом SQL, но не слишком люблю это:
declare @SQLstatment varchar(1000)
set @SQLstatment = 'insert into MyTable (Col1,Col2,Col3,Col4) values (' + OUTPUT_FROM_SPLIT + ')'
exec (@SQLstatment)
Становится интереснее.
Col4 относится к типу данных DB2 timestamp
. Мне нужно преобразовать его в тип данных SQL Server 2016 datetime2
, используя это заявление, которое я написал:
declare @DB2_timpstamp varchar(30) = '2019-02-25-11.22.33.456789'
select convert(datetime2, stuff(stuff(stuff(@DB2_timpstamp, 17, 1, ':'), 14, 1, ':'), 11, 1, ' '))
Задача
Я не могу заставить все это работать.
Я хочу максимально избегать использования динамического SQL. Скорее всего, я должен использовать петли. Решение будет выглядеть так:
while(SOME_CONDITION)
begin
insert into MyTable (Col1,Col2,Col3,Col4) values
(Val1,Val2,Val3,convert(datetime2, stuff(stuff(stuff(Val4, 17, 1, ':'), 14, 1, ':'), 11, 1, ' ')))
LOOP_VARIABLE_INCREMENT
end