Мне нужно преобразовать данные из электронной таблицы в операторы вставки в SQL. Я разработал большинство регулярных выражений для использования инструмента поиска и замены в SSMS, но столкнулся с проблемой при попытке сослаться на 9-й элемент в скобках в моей последней замене.
Вот исходная запись:
Blue Doe 12/21/1967 1126 Queens Highway Torrance CA 90802 N 1/1/2012
И это то, что мне нужно (на данный момент):
select 'Blue','Doe','19671221','1126 Queens Highway','Torrance','CA','90802','N','20120101'
Из-за ограничений на количество разрешенных элементов в скобках я должен выполнить замену три раза.Это может работать в хранимой процедуре, если я смогу сначала заставить это работать как POC.
Это первое совпадающее выражение:
^{:w:b:w:b}{:z}/{:z}/{:z:b[0-9A-Za-z:b]+:b:w:b[A-Z]+:b:z:b:w:b}{:z}/{:z}/{:z}
И замена: \10\2/0\3/\40\5/0\6/\7
Это добавляет нули к месяцам и дней так, чтобы в них было не менее двух символов.
При следующем совпадении даты переформатируются в формат, требуемый в запросе (без комментариев по поводу неиспользования поля даты. Это требование клиента к базе данных).
Соответствующее выражение:
^{:w:b:w:b}[0-9]*{[0-9]^2}/[0-9]*{[0-9]^2}/{:z}{:b[0-9A-Za-z:b]+:b:w:b[A-Z]+:b:z:b:w:b}[0-9]*{[0-9]^2}/[0-9]*{[0-9]^2}/{:z}
И замена: \1\4\(2,2)\(2,3)\5\8\(2,6)\(2,7)
Наконец, финальное совпадение вставляет результаты в оператор SQL, который будет использоваться в операторе вставки.
Соответствующее выражение:
^{:w}:b{:w}:b{:z}:b{[0-9A-Za-z:b]+}:b{:w}:b{[A-Z]+}:b{:z}:b{:w}:b{:z}
И замена: выберите '\1','\2','\3','\4','\5','\6','\7 ','\8','\9'
Все работает, кроме последней замены. По какой-то причине \9 НЕ получает данные из матча. Если я просто заменю все выражение замены на \9, я получу пустое место. Если я использую \8, я получаю N. Если я удаляю 8-й элемент в скобках, таким образом делая мой 9-й элемент восьмым, он возвращает то, что я хочу, 20120101.
Итак, мой вопрос: разрешает ли SSMS/SQL 9 выражений с тегами при использовании поиска/замены и регулярных выражений? Или я что-то здесь упускаю? Я знаю, что есть другие способы сделать это. Я просто пытаюсь сделать это быстро в качестве POC, прежде чем мы перенесем это в sproc или приложение.
Спасибо за любую помощь. -Питер