У меня есть запрос ниже:
declare @max int
select @max = max(len(RPVINVNoSpace)) from jde_SupplierInvoices
update jde_SupplierInvoices set RPVINVNumeric = ''
declare @loop int = 1
while @loop <= @max
begin
update jde_SupplierInvoices set RPVINVNumeric = RPVINVNumeric +
case when substring(RPVINVNoSpace,@loop,1) in ('0','1','2','3','4','5','6','7','8','9')
then substring(RPVINVNoSpace,@loop,1)
when substring(lower(RPVINVNoSpace),@loop,3) = 'jan' then '01'
when substring(lower(RPVINVNoSpace),@loop,3) = 'feb' then '02'
when substring(lower(RPVINVNoSpace),@loop,3) = 'mar' then '03'
when substring(lower(RPVINVNoSpace),@loop,3) = 'apr' then '04'
when substring(lower(RPVINVNoSpace),@loop,3) = 'may' then '05'
when substring(lower(RPVINVNoSpace),@loop,3) = 'jun' then '06'
when substring(lower(RPVINVNoSpace),@loop,3) = 'jul' then '07'
when substring(lower(RPVINVNoSpace),@loop,3) = 'aug' then '08'
when substring(lower(RPVINVNoSpace),@loop,3) = 'sep' then '09'
when substring(lower(RPVINVNoSpace),@loop,3) = 'oct' then '10'
when substring(lower(RPVINVNoSpace),@loop,3) = 'nov' then '11'
when substring(lower(RPVINVNoSpace),@loop,3) = 'dec' then '12'
else ''
end
set @loop = @loop + 1
end
Задача состоит в том, чтобы придумать лучший способ для повторной реализации этого, и CLR не допускается. В основном этот запрос обновляет значение столбца (RPVINVNumeric) до числового значения, полученного из другого столбца (RPVINVNoSpace), который состоит из буквенно-цифровых символов.
Таблица содержит миллионы строк, и запуск сценария занимает около 4 минут.
Вот пример данных для справки:
образец данных изображения
Я не могу отформатировать снимок экрана с дальнейшими извинениями за это.
Любая помощь будет высоко ценится.
Спасибо,
Arti