- Accueil
- Info légales
- Aide (FAQ)
- Les tags de ce site
- Bloc note
- Articles techniques
- Notes system
- Divers articles
- Drupal
- Notes ITIL 2007
- Notes MS
- Dans le quartier...
- Emploi
- Recettes de cuisine et adresses gourmandes
- mes applis ubuntu préferées
- Divers acronymes du monde social
- Internet 2018
- P2 meublé à louer - quartier du Poteau 75018
- apcos - réseaux sociaux et outils
- Articles techniques
- Divers liens
- Fun
- Mon CV IT
- Nouveautés
CHARINDEX() ou LIKE
Source: http://www.mssqltips.com/sqlservertip/1654/finding-a-string-value-in-a-s...
Comparaison fonction T-SQL CHARINDEX() et LIKE pour rechercher une chaine de texte "tosearch" dans des champs.
Son client avait besoin de remonter des infos dans 2 cas: la valeur du champs commence par "tosearch" ou "tosearch" est en début de mot (précédé d'un espace) - voir 1ere paragraphe de "solution" pour la demande du client : avec tosearch="B" et du texte tq "Bone Mass", "Thumb Pain", et "Tumor, Benign" on souhaite récupérér les chaines 1 et 3 (et non Thumb car pas d'espace avant le b mais m).
Son exemple commence par créer 2 tables ex: #ProductChild et #ProductParent - voir PJ " mysqltips1-crea.txt" pour le .sql. En voici l'affichage:
SELECT ID, Item |
SELECT ID, FKID, ChildDescription |
ID Item 10 SQL Server 20 Non-SQL Server |
ID FKID Child description 1 10 SQL Server 2 20 MySQL 3 30 Oracle 4 10 SQL Server 2000 |
On cherche les lignes dans ProductChild
où "Child description" commence par SQL ou a un mot qui commence par SQL
Avec CHARINDEX()
Cette fonction a 3 paramètres: la valeur que l'on recherche, le champs om on cherche cette valeur et la position du début dans le champs.
La ligne avec le LIKE est pour le cas où la description commence par SQL.
Pour le mot commencant par SQL: '' + @searchstring , C.ChildDescription , 1) > 0
- l'espace du début élimine l'ex "Thumb".
Voir la PJ mais en voici un extrait:
SELECT @searchstring = 'SQL'
SELECT @lensearch = LEN(@searchstring) SELECT DISTINCT P.ID, P.Item
FROM ##ProductParent P INNER JOIN ##ProductChild C ON P.ID = C.FKID
WHERE
C.ChildDescription LIKE @searchstring + '%'
OR
CHARINDEX(' ' + @searchstring, C.ChildDescription, 1) > 0
ORDER BY P.ID
Avec un LIKE
On peux aussi ajouter un espace et '%' (wildcard) avec un LIKE.
SELECT DISTINCT P.ID, P.Item
FROM ##ProductParent P INNER JOIN ##ProductChild C ON P.ID = C.FKID
WHERE
C.ChildDescription LIKE @searchstring + '%'
OR
C.ChildDescription LIKE '% ' + @searchstring + '%'
ORDER BY P.ID
CREATE PROCEDURE uspSearchWord @searchstring VARCHAR(100) AS
SELECT DISTINCT P.ID, P.Item
FROM ##ProductParent P INNER JOIN ##ProductChild C ON P.ID = C.FKID
WHERE
C.ChildDescription LIKE @searchstring + '%'
OR
C.ChildDescription LIKE '% ' + @searchstring + '%'
ORDER BY P.ID
doc:
Fichier attaché | Taille |
---|---|
Création 2 tables ex | 1.01 Ko |
Sript SQL qui utilise CHARINDEX et LIKE | 493 octets |
Sript SQL qui utilise LIKE | 424 octets |