Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème avec le fameux symbole underscore " "

5 réponses
Avatar
Loïc
SQL Server 2000
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

Bonjour =E0 tous,
J'esp=E8re que ma question sera suffisament claire afin que vous=20
m'apportiez vos =E9claircissements.

Voici de quoi il s'agit, lors d'une requ=EAte de s=E9lection concue de=20
mani=E8re triviale.

Exemple :=20
SELECT * FROM Tb_Test WHERE Code_Test LIKE '%B%' cela fonctionne=20
jusqu'au moment ou la recherche s'effectue sur un mot comportant un=20
underscore=3D>SELECT * FROM Tb_Test WHERE Code_Test LIKE '%B_%' en effet=20
j'ai remarqu=E9 que cela me ramenait tout les enregistrements et non pas=20
seulement ceux avec B_.=20

Apr=E8s plusieurs recherches, j'ai enfin compris que le "_" =E9tait=20
consid=E9r=E9 comme un symbole au sein de SQL-Server 2000, et d'apr=E8s ce =
que=20
j'ai pu lire il faut utiliser la syntaxe suivante afin de le consid=E9rer=
=20
comme =E9tant un crit=E8re =E0 part enti=E8re.

SELECT * FROM Tb_Test WHERE Code_Test LIKE 'B%#_%' ESCAPE '#'

Donc, =E0 partir de l=E0 il suffirait de parcourir le param=E8tre =E0 la=20
recherche du fameux _ et de l'encadrer du # ESCAPE. Mais j'ai du mal =E0=20
visualiser la chose.

Tout d'abord j'aimerais le faire au sein de la base sql et non de=20
l'application cliente.

Ensuite comment syntaxiquement sql g=E8re les conditions : IF=20
@Condition=3Dfonction(@strSearch)=3D'_' THEN concat=E8ne '#_%' ESCAPE '#''=
=20
avec le d=E9but de la requ=EAte.

Est ce que c'est faisable au sein de SQL-Server et si oui pouvez vous me=20
donner une piste. Ou bien un moyen de contourner ce probl=E8me de mot=20
r=E9serv=E9 '_'


En vous remerciant d'avance
Lo=EFc

5 réponses

Avatar
Vuillermet Jacques
Utilise la fonction REPLACE pour remplacer les _ par des [_].
(pas testé)

Voir dans la doc la page pour LIKE.

Jacques.

"Loïc" a écrit dans le message de news:

SQL Server 2000
===============
Bonjour à tous,
J'espère que ma question sera suffisament claire afin que vous
m'apportiez vos éclaircissements.

Voici de quoi il s'agit, lors d'une requête de sélection concue de
manière triviale.

Exemple :
SELECT * FROM Tb_Test WHERE Code_Test LIKE '%B%' cela fonctionne
jusqu'au moment ou la recherche s'effectue sur un mot comportant un
underscore=>SELECT * FROM Tb_Test WHERE Code_Test LIKE '%B_%' en effet
j'ai remarqué que cela me ramenait tout les enregistrements et non pas
seulement ceux avec B_.

Après plusieurs recherches, j'ai enfin compris que le "_" était
considéré comme un symbole au sein de SQL-Server 2000, et d'après ce que
j'ai pu lire il faut utiliser la syntaxe suivante afin de le considérer
comme étant un critère à part entière.

SELECT * FROM Tb_Test WHERE Code_Test LIKE 'B%#_%' ESCAPE '#'

Donc, à partir de là il suffirait de parcourir le paramètre à la
recherche du fameux _ et de l'encadrer du # ESCAPE. Mais j'ai du mal à
visualiser la chose.

Tout d'abord j'aimerais le faire au sein de la base sql et non de
l'application cliente.

Ensuite comment syntaxiquement sql gère les conditions : IF
@Condition=fonction(@strSearch)='_' THEN concatène '#_%' ESCAPE '#''
avec le début de la requête.

Est ce que c'est faisable au sein de SQL-Server et si oui pouvez vous me
donner une piste. Ou bien un moyen de contourner ce problème de mot
réservé '_'


En vous remerciant d'avance
Loïc
Avatar
Steve Kass
L'équivalent de WHERE Code_Test LIKE '%B[_]%' est WHERE
CHARINDEX('B_',Code_Test) > 0, si Code_Test est de type
char/nchar/varchar/nvarchar. Si Code_Test est de type text ou ntext, il
faut utiliser LIKE ou PATINDEX avec '%B[_]%'.

Steve Kass
Drew University


"Loïc" wrote in message
news:
SQL Server 2000
===============
Bonjour à tous,
J'espère que ma question sera suffisament claire afin que vous
m'apportiez vos éclaircissements.

Voici de quoi il s'agit, lors d'une requête de sélection concue de
manière triviale.

Exemple :
SELECT * FROM Tb_Test WHERE Code_Test LIKE '%B%' cela fonctionne
jusqu'au moment ou la recherche s'effectue sur un mot comportant un
underscore=>SELECT * FROM Tb_Test WHERE Code_Test LIKE '%B_%' en effet
j'ai remarqué que cela me ramenait tout les enregistrements et non pas
seulement ceux avec B_.

Après plusieurs recherches, j'ai enfin compris que le "_" était
considéré comme un symbole au sein de SQL-Server 2000, et d'après ce que
j'ai pu lire il faut utiliser la syntaxe suivante afin de le considérer
comme étant un critère à part entière.

SELECT * FROM Tb_Test WHERE Code_Test LIKE 'B%#_%' ESCAPE '#'

Donc, à partir de là il suffirait de parcourir le paramètre à la
recherche du fameux _ et de l'encadrer du # ESCAPE. Mais j'ai du mal à
visualiser la chose.

Tout d'abord j'aimerais le faire au sein de la base sql et non de
l'application cliente.

Ensuite comment syntaxiquement sql gère les conditions : IF
@Condition=fonction(@strSearch)='_' THEN concatène '#_%' ESCAPE '#''
avec le début de la requête.

Est ce que c'est faisable au sein de SQL-Server et si oui pouvez vous me
donner une piste. Ou bien un moyen de contourner ce problème de mot
réservé '_'


En vous remerciant d'avance
Loïc
Avatar
Loïc
Bonjour,

Merci pour vos réponses, j'y vois un peu plus clair et il est vrai que la
syntaxe '%B[_]%' convient parfaitement à ce que j'ai besoin dans le cas de
mon exemple.

Par contre, le problème réside lorsque je passe la valeur code test en
paramètre depuis mon interface cliente :

alter procedure dbo.Rq_ListeTest(@codeTest varchar(20))

Select * FROM dbo.Tb_Tests WHERE Test_Code=@CodeTest

Car c'est ce paramètre que je dois tester pour savoir s'il contient un _ et
le cas échéant le mettre en [_], je ne connais pas suffisament Sql pour
connaitre la manipulation des paramètres chaines.

Dans mon idée, cela ressemblerait à cela (passage par une variable locale) :
Declare vTest
Set vTest=Replace(@CodeTest,'_','[_]')
mais cela ne fonctionne pas.

Pouvez vous me faire connaitre votre façon de procéder dans de tel cas.

Merci infiniment de vos précieux conseils
Salutations
Loïc





"Steve Kass" a écrit dans le message de
news:%
L'équivalent de WHERE Code_Test LIKE '%B[_]%' est WHERE
CHARINDEX('B_',Code_Test) > 0, si Code_Test est de type
char/nchar/varchar/nvarchar. Si Code_Test est de type text ou ntext, il
faut utiliser LIKE ou PATINDEX avec '%B[_]%'.

Steve Kass
Drew University


"Loïc" wrote in message
news:
SQL Server 2000
=============== >
Bonjour à tous,
J'espère que ma question sera suffisament claire afin que vous
m'apportiez vos éclaircissements.

Voici de quoi il s'agit, lors d'une requête de sélection concue de
manière triviale.

Exemple :
SELECT * FROM Tb_Test WHERE Code_Test LIKE '%B%' cela fonctionne
jusqu'au moment ou la recherche s'effectue sur un mot comportant un
underscore=>SELECT * FROM Tb_Test WHERE Code_Test LIKE '%B_%' en effet
j'ai remarqué que cela me ramenait tout les enregistrements et non pas
seulement ceux avec B_.

Après plusieurs recherches, j'ai enfin compris que le "_" était
considéré comme un symbole au sein de SQL-Server 2000, et d'après ce que
j'ai pu lire il faut utiliser la syntaxe suivante afin de le considérer
comme étant un critère à part entière.

SELECT * FROM Tb_Test WHERE Code_Test LIKE 'B%#_%' ESCAPE '#'

Donc, à partir de là il suffirait de parcourir le paramètre à la
recherche du fameux _ et de l'encadrer du # ESCAPE. Mais j'ai du mal à
visualiser la chose.

Tout d'abord j'aimerais le faire au sein de la base sql et non de
l'application cliente.

Ensuite comment syntaxiquement sql gère les conditions : IF
@Condition=fonction(@strSearch)='_' THEN concatène '#_%' ESCAPE '#''
avec le début de la requête.

Est ce que c'est faisable au sein de SQL-Server et si oui pouvez vous me
donner une piste. Ou bien un moyen de contourner ce problème de mot
réservé '_'


En vous remerciant d'avance
Loïc




Avatar
Fred BROUARD
le mieux est de compléter ton LIKE avec une clause ESCAPE comme ceci :

LIKE '%B?_%' ESCAPE '?'

A lire :
http://sqlpro.developpez.com/SQL_AZ_2.html#SELECT_like" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://sqlpro.developpez.com/SQL_AZ_2.html#SELECT_like

A +

Loïc a écrit:
SQL Server 2000
=============== >
Bonjour à tous,
J'espère que ma question sera suffisament claire afin que vous
m'apportiez vos éclaircissements.

Voici de quoi il s'agit, lors d'une requête de sélection concue de
manière triviale.

Exemple :
SELECT * FROM Tb_Test WHERE Code_Test LIKE '%B%' cela fonctionne
jusqu'au moment ou la recherche s'effectue sur un mot comportant un
underscore=>SELECT * FROM Tb_Test WHERE Code_Test LIKE '%B_%' en effet
j'ai remarqué que cela me ramenait tout les enregistrements et non pas
seulement ceux avec B_.

Après plusieurs recherches, j'ai enfin compris que le "_" était
considéré comme un symbole au sein de SQL-Server 2000, et d'après ce que
j'ai pu lire il faut utiliser la syntaxe suivante afin de le considérer
comme étant un critère à part entière.

SELECT * FROM Tb_Test WHERE Code_Test LIKE 'B%#_%' ESCAPE '#'

Donc, à partir de là il suffirait de parcourir le paramètre à la
recherche du fameux _ et de l'encadrer du # ESCAPE. Mais j'ai du mal à
visualiser la chose.

Tout d'abord j'aimerais le faire au sein de la base sql et non de
l'application cliente.

Ensuite comment syntaxiquement sql gère les conditions : IF
@Condition=fonction(@strSearch)='_' THEN concatène '#_%' ESCAPE '#''
avec le début de la requête.

Est ce que c'est faisable au sein de SQL-Server et si oui pouvez vous me
donner une piste. Ou bien un moyen de contourner ce problème de mot
réservé '_'


En vous remerciant d'avance
Loïc



--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Fred BROUARD
le mieux est de compléter ton LIKE avec une clause ESCAPE comme ceci :

LIKE '%B?_%' ESCAPE '?'

A lire :
http://sqlpro.developpez.com/SQL_AZ_2.html#SELECT_like" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://sqlpro.developpez.com/SQL_AZ_2.html#SELECT_like

A +

Loïc a écrit:
SQL Server 2000
=============== >
Bonjour à tous,
J'espère que ma question sera suffisament claire afin que vous
m'apportiez vos éclaircissements.

Voici de quoi il s'agit, lors d'une requête de sélection concue de
manière triviale.

Exemple :
SELECT * FROM Tb_Test WHERE Code_Test LIKE '%B%' cela fonctionne
jusqu'au moment ou la recherche s'effectue sur un mot comportant un
underscore=>SELECT * FROM Tb_Test WHERE Code_Test LIKE '%B_%' en effet
j'ai remarqué que cela me ramenait tout les enregistrements et non pas
seulement ceux avec B_.

Après plusieurs recherches, j'ai enfin compris que le "_" était
considéré comme un symbole au sein de SQL-Server 2000, et d'après ce que
j'ai pu lire il faut utiliser la syntaxe suivante afin de le considérer
comme étant un critère à part entière.

SELECT * FROM Tb_Test WHERE Code_Test LIKE 'B%#_%' ESCAPE '#'

Donc, à partir de là il suffirait de parcourir le paramètre à la
recherche du fameux _ et de l'encadrer du # ESCAPE. Mais j'ai du mal à
visualiser la chose.

Tout d'abord j'aimerais le faire au sein de la base sql et non de
l'application cliente.

Ensuite comment syntaxiquement sql gère les conditions : IF
@Condition=fonction(@strSearch)='_' THEN concatène '#_%' ESCAPE '#''
avec le début de la requête.

Est ce que c'est faisable au sein de SQL-Server et si oui pouvez vous me
donner une piste. Ou bien un moyen de contourner ce problème de mot
réservé '_'


En vous remerciant d'avance
Loïc



--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************