Member 13138564 Ответов: 2

Как мне разделить строки ?


Как мне разделить строки? В одном поле у меня есть данные о городе штате и почтовом индексе

е.г:-
Address3 содержится

Флорида Флорида 40005
Лос-Анджелес al 50066

Мне нужно разделить address3 в городе Флориде штата Флорида и застежка - 40006

Я пробовал использовать substring и charindex, но в Лос-Анджелесе моя логика ошибается.

Кто-нибудь может помочь ?

Заранее спасибо..

Что я уже пробовал:

выберите подстроку(@address3,1,charindex(' ',@address3))
Иди--
флорида
Лос-это становится неправильным

RedDk

Оба эти возвращения верны. Лучшая ссылка для использования в любом случае-это книга-он-лайн справка, которая поставляется с SSMSE. Вам даже не нужно ничего искать. Наведите курсор на ключевое слово "подстрока", нажмите F1, и у вас есть полдюжины примеров, показывающих, что правильно. Внизу под объектом F1 находится множество связанных терминов, методов и функций. Это наилучший курс действий. Честно говоря, это глупый вопрос.

2 Ответов

Рейтинг:
5

Bryian Tan

Основываясь на примерах данных, предполагается, что формат адреса всегда один и тот же. Я бы предложил использовать PATHINDEX + выражение + RIGHT + REVERSE функции для управления строкой. Смотрите пример ниже. Чтобы найти название города, используйте подстроку от позиции 0 до позиции аббревиатуры штата.

Чтобы найти положение состояния, предположим, что состояние всегда будет начинаться с пробела, затем двух символов, затем следует пробел, а затем следует число и т. д...

DECLARE @table1 TABLE (
	Address1	VARCHAR(50)
)

INSERT INTO @table1
	SELECT 'Florida fl 40005' UNION
	SELECT 'los angeles al 50066' UNION
	SELECT ' EL Paso TX 79901'

SELECT  
City = SUBSTRING(Address1, 0, PATINDEX('%[ ][a-z][a-z][ ][1-9]%',Address1)),
[State] = SUBSTRING(Address1, PATINDEX('%[ ][a-z][a-z][ ][1-9]%',Address1), 3),
Zip = RIGHT(Address1, CHARINDEX(' ', REVERSE(Address1)) - 1) FROM @table1

Выход:
City	        State	Zip
 EL Paso	     TX	    79901
Florida	         fl	    40005
los angeles	     al	    50066


Maciej Los

5ed!

Bryian Tan

спасибо :)

CHill60

Также 5'd. Зачем кому-то давать этому 1-й голос?

Bryian Tan

спасибо :)

Рейтинг:
0

CHill60

Не забывайте, что начиная с SQL 2016 года существует также STRING_SPLIT (Transact-SQL) | Microsoft Docs[^] хотя они все равно должны быть умны, понимая, что им все равно нужно начинать с конца, чтобы обрабатывать пробелы в названии города :-)

Maciej Los

Хорошие точки, Кэролайн! Спасибо :)