Если вы сделаете одну и ту же замену дважды, будет обработано любое количество последовательных запятых.
REPLACE(REPLACE(FileData, ',,' , ',NULL,'), ',,' , ',NULL,')
Первая REPLACE
имеет дело со всеми нечетными позициями ...
',,,,,,,,'` => ',NULL,,NULL,,NULL,,NULL,'
Повторное действие будет иметь дело с всеми оставшихся позиций.
=> ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'
Обратите внимание, что специально обрабатывая особый случай трех последовательных запятых (как в другом ответе здесь) вы не будете обрабатывать четыре, пять или шесть и т. Д. c. Вышеупомянутое решение обобщается на любую длину последовательных запятых.
Чтобы быть полностью устойчивыми, вам также может потребоваться учитывать наличие пропущенного NULL
в первом или последнем месте в string.
[,ThatOneToMyLeft,and,ThatOneToMyRight,]
Трудоемким, но надежным подходом может быть замена [,
и ,]
на [,,
и ,,]
соответственно, затем двойная замена, а затем отмена первых шагов. ..
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
FileData,
'[,',
'[,,'
),
',]',
',,]'
),
',,',
',NULL,'
),
',,',
',NULL,'
),
',]',
']',
),
'[,',
'['
)
Есть способы сделать это менее многословным, но мне нужно бежать прямо сейчас:)