Процедура поиска SQL Server для слов в строковом столбце из табличного представления - PullRequest
0 голосов
/ 12 октября 2011

Я пытаюсь найти все адреса в табличном представлении, которые относятся к определенному списку почтовых индексов (500+ почтовых индексов)

Просматривая разные ответы, я нашел что-то очень похожее на то, что искал в этом StackPost

Проблема в том, что я имею дело с представлением (без полнотекстового поиска), а не со значением 1 на 1.

Я пытался сделать что-то вроде:

set @sql = "SELECT * FROM viewTABLE
            WHERE CONTAINS(Address, '"+replace(@list, ',', ' OR ')+"')"

Но, как уже упоминалось выше, это не работает - я могу создать таблицу, которая будет содержать список почтовых индексов, если это облегчит задачу, но каждый столбец «Адрес» нужно будет сравнить со списком почтовых индексов.

Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 13 октября 2011

Это не ответ, но это начало, чтобы помочь вам получить некоторые идеи моих мыслей, чтобы помочь вам решить вашу проблему.Мне удалось выделить числовые значения в начале столбца адреса.Если вы выделите последние символы, значит, вы уже в пути.

DECLARE @Customer TABLE
    (
      NewPK INT IDENTITY(1, 1) ,
      CustomerAddress NVARCHAR(MAX) NOT NULL
    )
INSERT  INTO @Customer
        ( CustomerAddress
        )
VALUES  ( '10 Fraley St # C, Kane, PA 16735'
        )
INSERT  INTO @Customer
        ( CustomerAddress
        )
VALUES  ( '5611 Market St, Maru, PA 500'
        )
INSERT  INTO @Customer
        ( CustomerAddress
        )
VALUES  ( '5644 N County Road 400 N, Scipio, IN 47273'
        )
INSERT  INTO @Customer
        ( CustomerAddress
        )
VALUES  ( '79 Fraley St # A, Kane, PA 500'
        )
INSERT  INTO @Customer
        ( CustomerAddress
        )
VALUES  ( '5195 N Camelot Way, North Vernon, IN 47265'
        )
INSERT  INTO @Customer
        ( CustomerAddress
        )
VALUES  ( '79 Fraley St # A, Kane, PA 16735'
        )

SELECT  CustomerAddress ,
        CASE WHEN PATINDEX('%[^0-9]%', CustomerAddress) > 0
             THEN SUBSTRING(CustomerAddress,
                            PATINDEX('%[0-9]%', CustomerAddress),
                            CHARINDEX(' ', CustomerAddress + SPACE(1),
                                      PATINDEX('%[0-9]%', CustomerAddress)))
             ELSE CustomerAddress
        END AS 'numeric'
FROM    @Customer
0 голосов
/ 12 октября 2011

Вы можете изменить свой существующий код, чтобы сделать что-то подобное с помощью оператора LIKE:

set @sql="
    SELECT *
      FROM viewTABLE
     WHERE Address LIKE '%"+replace(@list, ",", "%' OR Address LIKE '%")+"%'"

, который будет генерировать @sql следующим образом:

SELECT *
  FROM viewTABLE
 WHERE Address LIKE '%12345%' OR Address LIKE '%22345%' OR Address Like '%55314%'
       -- etc.

Однако это будетпроще, если список почтовых индексов находится в таблице:

SELECT *
  FROM viewTABLE v
 WHERE EXISTS
    (SELECT * FROM zipCodeList z
     WHERE v.Address LIKE '%'+z.ZipCode+'%')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...