У меня есть тысячи записей, которые являются бизнес-имена и адреса, натянутые вместе в одном поле (NameAddress):Замену выражения в CHARINDEX и LEN со значениями в другой таблице
Microsoft 1 157th Ave NE Redmond WA 98052
Apple Inc 1 Infinite Loop Cupertino CA 95014
Kraft Beton GmbH Industriestraße 123 1220 Wien
Pletzenauer Holzbau GmbH Moosnerweg 9 6382 Kirchdorf in Tirol
Я хотел бы разобрать города в свои поля. У меня есть запрос, который делает это хорошо, но буду работать только для одного города в то время:
CASE WHEN CHARINDEX('wien',NameAddress) > 0 THEN
SUBSTRING(NameAddress,(CHARINDEX('wien',NameAddress)),LEN('wien')) ELSE '' END
AS City
У меня есть таблица dbo.geography, содержащие имена всех этих городов. Можно ли использовать значения в этой таблице как выражение в командах CHARINDEX и LEN в моем предыдущем запросе?
В сущности, я запускаю проверку, чтобы увидеть, содержит ли строка какие-либо значения в другой таблице, и если да, создайте подстроку, содержащую это значение.
Чтобы уменьшить количество ложных срабатываний, вы можете добавить пробел до и после имени города при вызове CHARINDEX. Предполагая, что название города всегда находится в середине адреса (никогда в конце), это было бы похоже на поиск «всего слова». – acfrancis
Спасибо большое! Ваши ответы отлично работали. Теперь мне нужно вырвать имя с начала строки, и я думаю, что мне нужен другой подход. Я знаю, что можно создать подстроку всех символов, ведущих до определенной точки, т. Е. «Inc.». Можно ли сделать это по нескольким критериям, например, Inc. или Corp. или ООО и т. Д.? У меня есть все типы бизнес-объектов, хранящиеся в отдельной таблице. – gnarkill619
Да, это возможно. Думаю, вы можете использовать аналогичный подход, как указано выше. – Szymon