Я сделал нечто подобное (не в T-SQL) и считаю, что лучше всего начинать с конца строки и работать в обратном направлении.
- Возьмите самый правый элемент до первого пробела или запятой.
- Это известный код страны? Это страна
- Если нет, все ли это числа (включая дефис)? Это почтовый индекс.
- Остальное откажитесь
Возьмите второй самый правый элемент до следующего пробела или запятой
- Это поле из двух букв? Это состояние
Возьмите все остальное, предшествующее запятой, и назовите его городом.
Вам нужно будет внести некоторые коррективы в зависимости от того, как выглядят ваши входные данные, но основная идея состоит в том, чтобы начать справа, взять элементы, которые вы можете легко классифицировать, и назвать все остальное городом.
Вы можете реализовать нечто подобное, используя функцию REVERSE , чтобы упростить поиск (в этом случае вы будете анализировать строку слева направо, а не справа налево, как я уже говорил выше), функции PATINDEX или CHARINDEX для поиска пробелов и запятых и функция SUBSTRING для разделения адреса на основе позиций, найденных PATINDEX и CHARINDEX. Вы можете использовать функцию ASCII , чтобы определить, является ли символ числовым или нет.
Вы также пометили свой вопрос тегом SSIS - может быть проще реализовать синтаксический анализ в каком-либо скрипте VB в SSIS, чем пытаться сделать это с T-SQL.