2010-10-22 2 views
2

Je dois exécuter une simple instruction select pour une colonne appelée AddrZip pour afficher tous les enregistrements contenant '1/2' après le premier espace de la colonne. Dans Access 2007, il serait:
**Left([Names],InStr(1,[Names]," ")-1), mais ne peut pas trouver comment le faire dans SQL 2005. Toute aide sera appréciée.TSQL - Recherche de la première occurrence de valeur dans une chaîne

+0

substitue InStr (x, y, z) avec charindex (x, y, z) et vous avez terminé. – Ice

+0

Sue, avez-vous compris cela? – Brad

Répondre

0

Essayez ceci -

select * from table where addrZip like '%\ 1/2%' escape '\' 
1

Tout d'abord, rechercher des enregistrements avec un ' ':

CHARINDEX(' ', [AddrZip]) > 0

Ensuite, regardez les enregistrements avec un '1/2' survenant après la ' '

CHARINDEX('1/2', [AddrZip], CHARINDEX(' ', [AddrZip])) > 0

SELECT * 
FROM (SELECT * 
      FROM  [Addresses] 
      WHERE  CHARINDEX(' ', [AddrZip]) > 0 
     ) x 
WHERE CHARINDEX('1/2', [x].[AddrZip], CHARINDEX(' ', [AddrZip])) > 0 

Cette version "simplifiée" peut travail:

SELECT * 
FROM [Addresses] 
WHERE CHARINDEX(' ', [AddrZip]) > 0 
     AND CHARINDEX('1/2', [x].[AddrZip], CHARINDEX(' ', [AddrZip])) > 0 

Si vous voulez trouver les occurrences de '1/2' qui sont précéda immédiatement par un ' ' où le ' ' est le premier espace dans la chaîne, utilisez le code suivant:

SELECT * 
FROM [Addresses] 
WHERE CHARINDEX(' ', [AddrZip]) > 0 
     AND CHARINDEX(' ', [AddrZip]) = CHARINDEX(' 1/2', [x].[AddrZip]) 

Évitez les opérateurs LIKE si possible. Ils sont notoirement lents.

+0

Juste une pensée. Cela correspond même aux cordes 'sss 11/2' ce qui n'est pas ce que l'OP veut –

+0

@Sachin, pourquoi pas? Je vois un «1/2» et un «avant»? Qu'est-ce que ce n'est pas les spécifications du PO? Le PO n'a pas dit que le '1/2' devait ** immédiatement ** suivre le ''. – Brad

+0

Oui, vous avez raison. Il n'y a aucune mention de 1/2 suivant un espace immédiatement. J'ai supposé que le 1/2 suit la chose de l'espace. Voyons voir ce que OP veut vraiment. ;) –