titre_site.jpg (51607 octets)

 

Sql : Like

L'instruction LIKE liée au langage Sql supporté par dBase (elle n'est pas à confondre avec la fonction like()).

 ico_MsDos.jpg (1668 octets)  dbasedos.gif (376 octets) vdb5.gif (351 octets) Plus2_5-Icon.jpg (1250 octets) Description

Vous pouvez utiliser l'attribut LIKE pour le filtrage dans une clause WHERE:

WHERE <expC> LIKE <pattern expC> [ESCAPE <char>]

Dans <pattern expC>, le caractère % (pour cent) représente zéro ou plus caractères de masque, et le _(souligné) représente un simple caractère de masque. Pour inclure l'un ou l'autre caractère particulier comme caractère réel de configuration, spécifiez un caractère ESCAPE et précédez le caractère de masque avec ce caractère escape.

Encadrez les chaînes de caractères littérales avec des guillemets simples. Pour spécifier des guillemets simples dans une chaîne de caractères littérale, utilisez des guillemets doubles.

Ainsi dans l'instruction suivante va trouver tous les noms comportant la lettre "a"

q.sql = 'select * from monfichier where nom like "%a%"

Si vous souhaitez les noms commençant par "A"

q.sql = 'select * from monfichier where nom like "A%"

ou les seuls noms finissant par "a"

q.sql = 'select * from monfichier where nom like "%a"

 

 

Code    vdb5.gif (351 octets)   Plus2_5-Icon.jpg (1250 octets)

Une difficulté peut consister à vouloir rechercher dans une chaîne l'un des caractères de masque, % ou _. Cela peut principalement concerner le caractère %. Le code suivant présente comment définir un nouveau caractère d'échappement, le \ dans le cas présent.

if file("procent.dbf")
   drop table procent
endif

create table procent(ID autoinc, Name char(30))
use procent
append blank; replace name with "Vat 25 %"
append blank; replace name with "Invoice"
append blank; replace name with "10-15% Tax rate"
use

q = new query()
q.sql = 'select * from procent where name like "%\%%" escape "\"'
q.active = true

?
do while not q.rowset.endofset
   for i = 1 to q.rowset.fields.size
   ?? ""+q.rowset.fields[i].value,
next i
?
q.rowset.next()
enddo

q.active = false
drop table procent

Source :

Sujet : Re: SQL Like predicate
Date : Sun, 31 Aug 2014 23:12:17 +0200
Auteur : Ivar B. Jessen
Distribution : dbase.programming

 

Vous pouvez aussi prendre connaissance du formulaire se trouvant ici qui montre une utilisation de LIKE dans un formulaire avec deux ou 3 conditions.

 

ico_duflp.gif (1875 octets) dUFLP :

Vous avez dans cette collection un programme de construction de requête SQL : SQLDesigner.wfm

 

bug_jpg.jpg (2635 octets)  Bien comprendre

Le moteur Sql de dBase est sensible à la casse. Ainsi si vous indiquez un "A" dans la condition LIKE, seuls les champs comportant un A majuscule seront retenus. Pour cette raison, n'hésiter pas à faire usage de upper() ou lower() pour obtenir les résultats que vous souhaitez.

Rappel, les upper() et lower() cités, sont bien des instructions Sql et ne signifient pas que l'on peut mélanger des instructions xBase et Sql. Une ligne de code Sql ne doit comporter que des instructions Sql si vous souhaitez un fonctionnement stable de votre programme.

La commande de sélection évalue la condition WHERE.

Il faut donc être attentif à ce que tous les champs de la sélection ne soient pas parfois vides. Ainsi si la condition du champ 1 est remplie mais que le champ 2 est vide, la ligne ne sera pas retenue. Il convient de construire sa requête avec attention si vous ne voulez pas trouver un comportement logique que vous estimeriez bizarre. Et n'hésitez pas à la tester avec un jeu d'enregistrements.

Les commandes Sql n'étant pas propres à dBASE, vous trouvez facilement des informations sur leur fonctionnement. Ci-dessous quelques liens pour en savoir plus.

http://sql.sh/cours/where/like

http://blogs.codes-sources.com/christian/archive/2007/12/11/sql-server-la-verite-sur-le-like.aspx

http://www.1keydata.com/fr/sql/sql-like.php

http://sqlpro.developpez.com/cours/sqlaz/select/ voir point 3.4, notamment pour utilisation escape

http://msdn.microsoft.com/fr-fr/library/ms179859.aspx

http://dev.mysql.com/doc/refman/5.0/fr/string-comparison-functions.html

http://www.cterrier.com/cours/requete_sql/10_sql2.pdf

http://www.techonthenet.com/sql/like.php

http://forum.hardware.fr/hfr/Programmation/SGBD-SQL/requete-sql-caractere-sujet_58230_1.htm

http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap20.htm

 

retour

Sources :

http://sql.sh/cours/where/like

Aide dBase Plus 2.8 FR

dUFLP version W

Forum dbase.programming

Retour à l'accueil

Les informations de cette page sont données à titre indicatif et ne se substituent pas à celles contenues dans l'Aide de votre version de dBase qui reste la meilleure documentation.


Si vous voyez des erreurs, ou souhaitez apporter des compléments, n'hésitez pas à le signaler.
Dernière modification : lundi 01 septembre 2014

©  M.Abraham.