OVH Cloud OVH Cloud

select avec un %

18 réponses
Avatar
renotm
Bonjour,

j'ai une table avec des champs qui se terminent par le caractère %. Je
voudrais récupérer uniquement ces lignes.

Si je fais :

select * from matable where name like '%%';

ca me retourne tout. Sauriez vous comment echapper ce caractère % ???

Merci d'avance.

ps : je suis sous Oracle.
--
Renotm
http://www.expo7.com - Exposez Vos Photos

10 réponses

1 2
Avatar
Ph. B.
renotm wrote:

Bonjour,

j'ai une table avec des champs qui se terminent par le caractère %. Je
voudrais récupérer uniquement ces lignes.

Si je fais :

select * from matable where name like '%%';

ca me retourne tout. Sauriez vous comment echapper ce caractère % ???

Merci d'avance.

ps : je suis sous Oracle.



Il faut indiquer un caractère d'échappement

SELECT *
FROM matable
WHERE name LIKE '!%%' ESCAPE '!'

--
Philippe.
Avatar
Igor Racic
Ph. B. wrote:
renotm wrote:

Bonjour,

j'ai une table avec des champs qui se terminent par le caractère %. Je
voudrais récupérer uniquement ces lignes.

Si je fais :

select * from matable where name like '%%';

ca me retourne tout. Sauriez vous comment echapper ce caractère % ???

Merci d'avance.

ps : je suis sous Oracle.




Il faut indiquer un caractère d'échappement

SELECT *
FROM matable
WHERE name LIKE '!%%' ESCAPE '!'




Je suppose que tu a pensé
like '%!%' escape '!'

Dans 10g, c'est plus lisible (et beaucoup plus 'forte' à faire les
choses plus compliqués avec 'regular expressions' ):

select * from matable where regexp_like ( name, '%$' );


Igor
Avatar
Fred BROUARD - SQLpro
sauf Igor, qu'encore une fois Oracle se fiche de la norme (SQL:1999) qui
introduit le prédicat de recherche IS SIMILAR TO afin d'effectuer des recherches
en utilisant les expressions régulières.

Exemple :

SELECT CLI_ID, CLI_PRENOM
FROM T_CLIENT
WHERE CLI_PRENOM IS SIMILAR TO '[:ALPHA:]+[e]'

recherche les clients dont les prénoms ne contiennet que des lettres et se
terminant par un 'e'

A +

--
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
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************


Igor Racic a écrit:
Ph. B. wrote:

renotm wrote:

Bonjour,

j'ai une table avec des champs qui se terminent par le caractère %. Je
voudrais récupérer uniquement ces lignes.

Si je fais :

select * from matable where name like '%%';

ca me retourne tout. Sauriez vous comment echapper ce caractère % ???

Merci d'avance.

ps : je suis sous Oracle.





Il faut indiquer un caractère d'échappement

SELECT *
FROM matable
WHERE name LIKE '!%%' ESCAPE '!'




Je suppose que tu a pensé
like '%!%' escape '!'

Dans 10g, c'est plus lisible (et beaucoup plus 'forte' à faire les
choses plus compliqués avec 'regular expressions' ):

select * from matable where regexp_like ( name, '%$' );


Igor
Avatar
Igor Racic
Bonjour

Oracle à implémenté 'POSIX-style regular expressions' (Unix-style).
Aujourd'hui 'POSIX regexps' ne font pas partie de SQL standard.
Par rapport à SQL SIMILAR, ils semblent d'avoir assez d'avantage -
'backreferences', 'interval quantifiers', possibilité de faire certain
opérations (extraction, remplacement) etc...

Igor


Fred BROUARD - SQLpro wrote:
sauf Igor, qu'encore une fois Oracle se fiche de la norme (SQL:1999) qui
introduit le prédicat de recherche IS SIMILAR TO afin d'effectuer des
recherches en utilisant les expressions régulières.

Exemple :

SELECT CLI_ID, CLI_PRENOM
FROM T_CLIENT
WHERE CLI_PRENOM IS SIMILAR TO '[:ALPHA:]+[e]'

recherche les clients dont les prénoms ne contiennet que des lettres et
se terminant par un 'e'

A +

Avatar
Fred BROUARD - SQLpro
mais Unix ne représente pas l'ensemble des OS...

Et IS SIMILAR TO est bien plus étendu dans son concept que le traitement style
UNIX de regexp...

Voici la syntaxe complète :

<string_value> IS [ NOT ] SIMILAR TO <pattern value> [ ESCAPE <escape value> ]

<pattern value> :: <string value>
| <regular expression>

<regular expression> :: <regular term>
| <regular expression> <vertical bar> <regular term>

<regular term> :: <regular factor>
| <regular term> <regular factor>

<regular factor> :: <regular primary>
| <regular primary> *
| <regular primary> +

<regular primary> :: <character specifier>
| %
| <regular character set>
| ( <regular expression> )

<character specifier> :: <non-escaped character>
| <escaped character>

<regular character set> :: <underscore>
| ( <character enumeration> ... )
| ( ^ <character enumeration> ... )
| ( : <regular charset id> : )

<character enumeration> :: <character specifier>
| <character specifier> - <character specifier>

<regular charset id> :: ALPHA
| UPPER
| LOWER
| DIGIT
| ALNUM

A +

--
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
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************



Igor Racic a écrit:

Bonjour

Oracle à implémenté 'POSIX-style regular expressions' (Unix-style).
Aujourd'hui 'POSIX regexps' ne font pas partie de SQL standard.
Par rapport à SQL SIMILAR, ils semblent d'avoir assez d'avantage -
'backreferences', 'interval quantifiers', possibilité de faire certain
opérations (extraction, remplacement) etc...

Igor


Fred BROUARD - SQLpro wrote:

sauf Igor, qu'encore une fois Oracle se fiche de la norme (SQL:1999)
qui introduit le prédicat de recherche IS SIMILAR TO afin d'effectuer
des recherches en utilisant les expressions régulières.

Exemple :

SELECT CLI_ID, CLI_PRENOM
FROM T_CLIENT
WHERE CLI_PRENOM IS SIMILAR TO '[:ALPHA:]+[e]'

recherche les clients dont les prénoms ne contiennet que des lettres
et se terminant par un 'e'

A +

Avatar
Bruno Jargot
On Sat, 7 Aug 2004 16:09:19 +0200, Fred BROUARD - SQLpro wrote

Et IS SIMILAR TO est bien plus étendu dans son concept que le traitement
style UNIX de regexp...



Je serais très intéressé de comprendre en quoi le concept de IS
SIMILAR TO est bien plus étendu que celui de REGEXP_LIKE.

Je remarque juste que les expressions régulières de IS SIMILAR TO
sont très limitées par rapport à celles reconnues par Oracle.
Avatar
Igor Racic
J'ai l'impression que tu n'a pas bien lu ma réponse.

SIMILAR est seulement - LIKE étendu.

Oracle regexp est capable de faire les choses comme ça:

1 select
2 regexp_replace( '000001-0000ASB-98798797',
3 '(.*)-(.*)-(.*)', '{3} {2} {1}' )
4* from dual
SQL> /

REGEXP_REPLACE('000001-0000AS
-----------------------------
{98798797} {0000ASB} {000001}

Ca n'est pas possible de faire avec SQL:1999.


Igor


Fred BROUARD - SQLpro wrote:
mais Unix ne représente pas l'ensemble des OS...

Et IS SIMILAR TO est bien plus étendu dans son concept que le traitement
style UNIX de regexp...

Voici la syntaxe complète :

<string_value> IS [ NOT ] SIMILAR TO <pattern value> [ ESCAPE <escape
value> ]

<pattern value> :: > <string value>
| <regular expression>

<regular expression> :: > <regular term>
| <regular expression> <vertical bar> <regular term>

<regular term> :: > <regular factor>
| <regular term> <regular factor>

<regular factor> :: > <regular primary>
| <regular primary> *
| <regular primary> +

<regular primary> :: > <character specifier>
| %
| <regular character set>
| ( <regular expression> )

<character specifier> :: > <non-escaped character>
| <escaped character>

<regular character set> :: > <underscore>
| ( <character enumeration> ... )
| ( ^ <character enumeration> ... )
| ( : <regular charset id> : )

<character enumeration> :: > <character specifier>
| <character specifier> - <character specifier>

<regular charset id> :: > ALPHA
| UPPER
| LOWER
| DIGIT
| ALNUM

A +

Avatar
Fred BROUARD - SQLpro
1) IS SIMILAR TO est combinable avec les collations et permet de travailler sur
différents jeux de caractères, ce qui est plus adapté au monde des bases de données

2) avec l'usage des TRANSLATION combinées au prédicat IS SIMILAR TO on peut
effectuer un remplacement.

Sur ce dernier point, regexp est plus étendu que ne l'est SQL...

mais il est vrai que, si je ne me trompe pas, Oracle ne sait toujours pas ce
qu'est une collation...

A +

Bruno Jargot a écrit:
On Sat, 7 Aug 2004 16:09:19 +0200, Fred BROUARD - SQLpro wrote


Et IS SIMILAR TO est bien plus étendu dans son concept que le traitement
style UNIX de regexp...




Je serais très intéressé de comprendre en quoi le concept de IS
SIMILAR TO est bien plus étendu que celui de REGEXP_LIKE.

Je remarque juste que les expressions régulières de IS SIMILAR TO
sont très limitées par rapport à celles reconnues par Oracle.




--
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
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Igor Racic
Je dirait que tu te trompe.

http://www.dbazine.com/gulutzan1.shtml


Igor



Fred BROUARD - SQLpro wrote:
1) IS SIMILAR TO est combinable avec les collations et permet de
travailler sur différents jeux de caractères, ce qui est plus adapté au
monde des bases de données

2) avec l'usage des TRANSLATION combinées au prédicat IS SIMILAR TO on
peut effectuer un remplacement.

Sur ce dernier point, regexp est plus étendu que ne l'est SQL...

mais il est vrai que, si je ne me trompe pas, Oracle ne sait toujours
pas ce qu'est une collation...

A +

Bruno Jargot a écrit:

On Sat, 7 Aug 2004 16:09:19 +0200, Fred BROUARD - SQLpro wrote


Et IS SIMILAR TO est bien plus étendu dans son concept que le
traitement style UNIX de regexp...





Je serais très intéressé de comprendre en quoi le concept de IS
SIMILAR TO est bien plus étendu que celui de REGEXP_LIKE.

Je remarque juste que les expressions régulières de IS SIMILAR TO sont
très limitées par rapport à celles reconnues par Oracle.




Avatar
Fred BROUARD - SQLpro
je connaissait l'article de Peter, mais je dois avouer que je n'ai trouvé nulle
parta dans la doc Oracle la liste des collations, ni même le mot collation...

Aurait tu des infos sur le sujet ?

A +

Igor Racic a écrit:

Je dirait que tu te trompe.

http://www.dbazine.com/gulutzan1.shtml


Igor



Fred BROUARD - SQLpro wrote:

1) IS SIMILAR TO est combinable avec les collations et permet de
travailler sur différents jeux de caractères, ce qui est plus adapté
au monde des bases de données

2) avec l'usage des TRANSLATION combinées au prédicat IS SIMILAR TO on
peut effectuer un remplacement.

Sur ce dernier point, regexp est plus étendu que ne l'est SQL...

mais il est vrai que, si je ne me trompe pas, Oracle ne sait toujours
pas ce qu'est une collation...

A +

Bruno Jargot a écrit:

On Sat, 7 Aug 2004 16:09:19 +0200, Fred BROUARD - SQLpro wrote


Et IS SIMILAR TO est bien plus étendu dans son concept que le
traitement style UNIX de regexp...






Je serais très intéressé de comprendre en quoi le concept de IS
SIMILAR TO est bien plus étendu que celui de REGEXP_LIKE.

Je remarque juste que les expressions régulières de IS SIMILAR TO
sont très limitées par rapport à celles reconnues par Oracle.









--
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
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
1 2