#sql-server #data-analysis
#sql-сервер #анализ данных
Вопрос:
Справочная информация:
У меня есть столбец в моей таблице SQL Server, который состоит из значений, которые выглядят следующим образом:
Location
AM - Equi A2 Amsterdam
AM - Equi A2 Amsterdam
AM - Equi A2 Amsterdam
GRU - log Equ SP São Paulo(NUM)
GRU - log Equ SP São Paulo(NUM)
GRU - log Equ SP São Paulo(NUM)
SJC1 - DR Santa Clara(FIS)
IAD - Terremark NAV Culpepper
HKG1 - Equin HK Hong Kong
Дилемма:
Как мне извлечь только фактические места, такие как: Сан-Паулу, Амстердам, Калпеппер, Гонконг и т. Д., В новый столбец?
Желаемый результат:
Amsterdam
Amsterdam
Amsterdam
São Paulo
São Paulo
São Paulo
Santa Clara
Culpepper
Hong Kong
Проблема в том, что я не могу просто разделить последнее пустое место из-за стран, в которых есть два слова, разделенных пробелом. (Гонконг, Сан-Паулу)
Над чем я работал:
SELECT TRIM( '- ' FROM ' Table ') AS TrimmedString;
Комментарии:
1. Основываясь на показанных данных, я ожидаю, что его невозможно просто разделить, поскольку, по-видимому, не существует логического правила, которому можно было бы следовать. Если у вас есть существующая таблица, содержащая названия стран, вы можете посмотреть, существует ли это имя в строке.
2. @DaleK Мне было интересно, имеет ли SQL логику шаблонов, такую как регулярные выражения Python (regex)
3. Какой шаблон регулярных выражений найдет его? Учитывая, что вы не знаете, состоит ли название города из 1 или 2 слов? Если у вас есть шаблон регулярных выражений, который работает, мы могли бы найти способ сделать это в SQL, но я думаю, что это проблема логики, а не проблема технологии.
4. Возможно, с помощью: поиск дефиса и игнорирование всего, что происходит перед дефисом. После того, как мы нашли дефис, найдите подстроку, содержащую только заглавные буквы и / или цифры, и эта подстрока должна быть окружена 1 или более пробелами
5. Я написал ответ, неправильно поняв ожидаемый результат! Возможно и довольно просто получить весь текст после — но нет шаблона или логики относительно того, где провинция (?) Становится городом
Ответ №1:
Поскольку шаблон извлечения отсутствует
- Создайте таблицу со всеми основными названиями городов, для этого вы можете найти csv в Интернете. (пример)
- Напишите запрос, который присоединяется с помощью like . (обратите внимание, что этот запрос не поддается проверке.)
Пример
SELECT t.Locarion
, c.CityName
FROM Table t
LEFT JOIN City c on t.Location LIKE '%' c.CityName '%'
- Вставьте отсутствующие города на основе нулевых значений в предыдущем запросе.
В зависимости от того, выполняется ли это одноразовый запрос или выполняется несколько раз в день, вы можете захотеть изменить свою модель, чтобы иметь внешний ключ к таблице городов.