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
Répondre
Essayez ceci -
select * from table where addrZip like '%\ 1/2%' escape '\'
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.
Juste une pensée. Cela correspond même aux cordes 'sss 11/2' ce qui n'est pas ce que l'OP veut –
@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
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. ;) –
substitue InStr (x, y, z) avec charindex (x, y, z) et vous avez terminé. – Ice
Sue, avez-vous compris cela? – Brad