2011-10-12 4 views
0

Je suis en train de chercher toutes les adresses en vue de la table, qui appartiennent à une certaine liste de code (500+ ZipCodes)procédure de recherche de SQL Server pour les mots dans la colonne de chaîne de la vue de la table

une recherche dans les différents réponses, j'ai trouvé quelque chose de très proche de ce que je cherchais this StackPost

Le problème est que j'ai affaire à une vue (pas de recherche en texte intégral) et non à une valeur 1 sur 1.

J'ai essayé de faire quelque chose le long des lignes de:

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

Mais comme mentionné ci-dessus qui ne fonctionne pas - je peux créer une table qui contiendra la liste de code si cela rend les choses plus faciles, mais chaque La colonne "Adresse" devra être comparée à la liste des codes postaux.

Toute aide est très appréciée!

Répondre

0

Vous pouvez modifier votre code existant pour faire quelque chose comme ça avec LIKE déclaration:

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

qui généreront @sql comme ceci:

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

Cependant, il serait plus facile si la liste des codes postaux étaient dans un tableau:

SELECT * 
    FROM viewTABLE v 
WHERE EXISTS 
    (SELECT * FROM zipCodeList z 
    WHERE v.Address LIKE '%'+z.ZipCode+'%') 
+0

une telle réponse simple ... ugh - Je ne sais pas comment je ne pensais pas au code postal dans le tableau. Merci MellaMokB – TeckniX

0

Ceci n'est pas la réponse mais C'est un début pour vous aider à avoir quelques idées de mes pensées pour vous aider à résoudre votre problème. J'ai réussi à isoler les valeurs numériques au début de la colonne d'adresse. Si vous isolez les derniers caractères, vous êtes sur votre chemin.

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

Merci pour la suggestion - j'allais écrire quelque chose de similaire, mais je pensais qu'il devait y avoir une recherche plus facile. – TeckniX

Questions connexes