Мне нужна помощь в разделении адресов (номер, добавление и т. Д.) - PullRequest
3 голосов
/ 21 июля 2010

Извинения за нечеткое название ...

Моя проблема в этом; У меня есть люди таблицы SQL Server с около 100.000 записей. У каждого человека есть адрес, что-то вроде «Nieuwe Prinsengracht 12 - III». Теперь клиент хочет отделить улицу от номера и сложения (поэтому каждый адрес становится двумя или тремя полями). Проблема в том, что мы не можем быть уверены в том, в каком формате находится текущий адрес, это также может быть что-то вроде «Velperweg 30».

Единственное, что мы знаем об этом, это то, что это фрагмент текста, за которым следует число, за которым, возможно, следует еще какой-то текст (который может содержать число).

Возможным решением было бы сделать это с помощью регулярных выражений, но я бы очень (очень, очень) предпочел бы сделать это с помощью запроса. Есть ли способ использовать регулярные выражения в запросе? Или у вас есть другие предложения, как решить такую ​​проблему?

Ответы [ 7 ]

4 голосов
/ 21 июля 2010

SQL Server и T-SQL довольно ограничены в своих навыках обработки - если вы действительно серьезно относитесь к тяжелым операциям, регулярным выражениям и т. Д., Вам лучше всего создать сборку в C # или VB.NET, которая все это хитрое дело с Regex, а затем его развертывание в SQL-CLR и использование функций в T-SQL.

«Чистый» T-SQL на самом деле не может обрабатывать много манипуляций со строками, кроме SUBSTRING и CHARINDEX - но это все.

3 голосов
/ 21 июля 2010

Может быть, что-то вроде этого?

SELECT
   substring([address_field], 1, patindex('%[1-9]%', [address_field])-1) as [STREET],
   substring([address_field], patindex('%[1-9]%', [address_field]), len([address_field])) as [NUMBER_ADDITON]
FROM
   [table]

Он основан на предположении, что поле [улица] не будет содержать никаких чисел, а поле [число_адресация] начнется с цифры.

1 голос
/ 21 июля 2010

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

Я предполагаю, что кто бы вы ни работали на их основной бизнес, это не анализ парсинга. Мой совет - купить решение, а не создавать свое собственное.

Я знаком с этой компанией . Примеры вашего адреса не из США и не из Канады, поэтому я не знаю, будут ли полезны их продукты, но они могут указать вам другого поставщика.

Кроме пользователей их продуктов, я не имею к ним никакого отношения.

1 голос
/ 21 июля 2010

В ответ на ваш вопрос: «Есть ли способ использовать регулярные выражения в запросе?», Тогда да, но это требует немного знаний. Создайте сборку CLR с пользовательской функцией, которая выполняет ваши регулярные выражения. Visual Studio 2008 имеет шаблон проекта для этого. Разверните его на своем SQL-сервере и вызовите из запроса.

0 голосов
/ 30 сентября 2014

Я понимаю, что это старый вопрос, но для дальнейшего использования я все же решил добавить ответ с помощью регулярных выражений (также, поэтому я не забываю его сам). Сегодня я столкнулся с аналогичной проблемой в Excel, в которой мне пришлось разделить адрес по улице и номеру дома. В конце я скопировал столбец в SublimeText (условно-бесплатный текстовый редактор) и использовал регулярное выражение для выполнения работы (CTRL-H, включить регулярное выражение):

FIND: ^('?\d?\d?\d?['-\.a-zA-Z ]*)(\d*).*$
REPLACE FOR THE HOUSE NUMBER: $2
REPLACE FOR THE STREET NAME:  $1

Некоторые заметки:

  • Некоторые адреса начинаются с цитаты, например, 't Hofje, поэтому мне нужно было добавить'?
  • Некоторые адреса в начале содержали цифры, например, 17 сентября, или 2е Molendwarsstraat, поэтому я добавил \ d? \ D? \ D?
  • Некоторые адреса содержали -, например, Виллем-Александерлан или '
0 голосов
/ 21 июля 2010

TGnat правильно. Стандартизация адресов сложна.

Я сталкивался с этой проблемой раньше.

Если ваш клиент не хочет использовать пользовательское программное обеспечение, разработайте простой графический интерфейс, который позволит человеку взять адрес и разделить его вручную. Вы удалили строку адреса со старым форматом и вставили строку с новым форматом адреса.

У машинисток, знакомых с вашими адресами, не составит труда сделать 100 000 изменений вручную. Конечно, заказчик может потратить деньги на заказное программное обеспечение или машинистки.

Но вы не должны зацикливаться на счете за очистку данных.

0 голосов
/ 21 июля 2010

Это звучит как общая проблема «взять кусок сложного текста, который может выглядеть как угодно, и заставить его выглядеть так, как мы сейчас хотим, чтобы он выглядел» проблема.Это, как правило, очень трудно сделать, используя только T-SQL (который не имеет встроенной функциональности регулярных выражений).Вам, вероятно, придется работать со сложным кодом вне базы данных, чтобы решить эту проблему.

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