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

Pb de comparaison de chaines avec un tiret "-"

4 réponses
Avatar
Kevin MARIE
Bonjour,

Je rencontre actuellement un problème avec la comparaison de chaines
comportant un "tiret" : SQL Server semble ignorer ce caractère !

Ex : j'insère différentes valeurs de test dans une colonne de type varchar :

insert into testchaine (lib) values ('000')
insert into testchaine (lib) values ('aaa')
insert into testchaine (lib) values ('a-d')
insert into testchaine (lib) values ('a-a')
insert into testchaine (lib) values ('abb')

et lorsque je fais un "select lib from testchaine order by 1" cela me donne
le résultat suivant :

lib
-----
000
a-a
aaa
abb
a-d

si je remplace le '-' par un autre caractère (par exemple '_') le même
select donne :

lib
-----
000
a_a
a_d
aaa
abb

ce qui me parrait être un comportement bcp + "normal".

Pour info : SQL Server 2000 (installation par défaut), SP3, collation
FRENCH_CI_AS


Si quelqu'un voit d'où cela peut provenir...


Merci

Kevin.

4 réponses

Avatar
Jorge Lavado
Bonjour

Avec Exec MASTER..sp_helpsort ,regarde tom sort order id : SQL Server Sort Order [numero
Avec le sort order id tu peux voir sur BOL

-->[collations, changing settings]
-->[Selecting a SQL Collation] tu doit avoir une table de correspondance (comment est interpreter

CREATE TABLE #testchaine (lib VARCHAR(3) COLLATE FRENCH_CI_AS

insert into #testchaine (lib) values ('000'
insert into #testchaine (lib) values ('aaa'
insert into #testchaine (lib) values ('a-d'
insert into #testchaine (lib) values ('a-a'
insert into #testchaine (lib) values ('abb'

Select lib from #testchaine order by lib


CREATE TABLE #testchaine2 (lib VARCHAR(3) COLLATE Latin1_General_CI_AS

insert into #testchaine2 (lib) values ('000'
insert into #testchaine2 (lib) values ('aaa'
insert into #testchaine2 (lib) values ('a-d'
insert into #testchaine2 (lib) values ('a-a'
insert into #testchaine2 (lib) values ('abb'

Select lib from #testchaine2 order by lib
Avatar
Michel Walsh
Salut,


Certains caractères sont "muets", ou "invisibles" vis-à-vis un
ordonnancement. Le trait d'union, comme montré par l'exemple fourni, ainsi
que l'apostrophe, sont du nombre ( peut-être d'autres, je ne saurais dire).
L'ordonnancement se passe comme si le dit caractère n'était "pas là".


Espérant être utile,
Vanderghast, Access MVP


"Kevin MARIE" wrote in message
news:402b513a$0$28666$
Bonjour,

Je rencontre actuellement un problème avec la comparaison de chaines
comportant un "tiret" : SQL Server semble ignorer ce caractère !

Ex : j'insère différentes valeurs de test dans une colonne de type varchar


:

insert into testchaine (lib) values ('000')
insert into testchaine (lib) values ('aaa')
insert into testchaine (lib) values ('a-d')
insert into testchaine (lib) values ('a-a')
insert into testchaine (lib) values ('abb')

et lorsque je fais un "select lib from testchaine order by 1" cela me


donne
le résultat suivant :

lib
-----
000
a-a
aaa
abb
a-d

si je remplace le '-' par un autre caractère (par exemple '_') le même
select donne :

lib
-----
000
a_a
a_d
aaa
abb

ce qui me parrait être un comportement bcp + "normal".

Pour info : SQL Server 2000 (installation par défaut), SP3, collation
FRENCH_CI_AS


Si quelqu'un voit d'où cela peut provenir...


Merci

Kevin.




Avatar
Fred BROUARD
cela dépend de la collation tilisée et hu jeu de caractères sous jacent.
As tu pensé à choisir ta collation à l'intall de SQL Server en fonction
de tes besoins ?

Sinon tu peut toujours indiquer une collation pour la base ou les
colonnes d'une table. A défaut c'est celle du serveur.

A lire sur le sujet :
http://sqlpro.developpez.com/SQL_AZ_7.html#SCHEMA4

A +

Kevin MARIE a écrit:
Bonjour,

Je rencontre actuellement un problème avec la comparaison de chaines
comportant un "tiret" : SQL Server semble ignorer ce caractère !

Ex : j'insère différentes valeurs de test dans une colonne de type varchar :

insert into testchaine (lib) values ('000')
insert into testchaine (lib) values ('aaa')
insert into testchaine (lib) values ('a-d')
insert into testchaine (lib) values ('a-a')
insert into testchaine (lib) values ('abb')

et lorsque je fais un "select lib from testchaine order by 1" cela me donne
le résultat suivant :

lib
-----
000
a-a
aaa
abb
a-d

si je remplace le '-' par un autre caractère (par exemple '_') le même
select donne :

lib
-----
000
a_a
a_d
aaa
abb

ce qui me parrait être un comportement bcp + "normal".

Pour info : SQL Server 2000 (installation par défaut), SP3, collation
FRENCH_CI_AS


Si quelqu'un voit d'où cela peut provenir...


Merci

Kevin.





--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / 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
****************** mailto: ******************
Avatar
Michel Walsh
Salut,


Et pour références, c'est propre à Win32, comme le reporte Dr GUI.
Il semble que seuls - et ' sont impliqués. J'ai ajouté les astérix:

=================================== For Win32 it is the same, with two exceptions: the hyphen or minus (-)
symbol and the single-quote or apostrophe ( ' ). ***These two characters
are ignored when sorting strings *** because they are allowed to be
embedded in English-language words. For example, "its" and "it's" and
"co-op" and "coop." The presence of these characters embedded in words
causes certain searches to break incorrectly, so they are changed to be
treated just like other diacritical marks embedded in text strings; that is,
they're ignored.
==================================== (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaskdr/ht
ml/drgui49.asp)

Espérant être utile,
Vanderghast, Access MVP



"Michel Walsh" wrote in message
news:utBh%
Salut,


Certains caractères sont "muets", ou "invisibles" vis-à-vis un
ordonnancement. Le trait d'union, comme montré par l'exemple fourni, ainsi
que l'apostrophe, sont du nombre ( peut-être d'autres, je ne saurais


dire).
L'ordonnancement se passe comme si le dit caractère n'était "pas là".


Espérant être utile,
Vanderghast, Access MVP


"Kevin MARIE" wrote in message
news:402b513a$0$28666$
> Bonjour,
>
> Je rencontre actuellement un problème avec la comparaison de chaines
> comportant un "tiret" : SQL Server semble ignorer ce caractère !
>
> Ex : j'insère différentes valeurs de test dans une colonne de type


varchar
:
>
> insert into testchaine (lib) values ('000')
> insert into testchaine (lib) values ('aaa')
> insert into testchaine (lib) values ('a-d')
> insert into testchaine (lib) values ('a-a')
> insert into testchaine (lib) values ('abb')
>
> et lorsque je fais un "select lib from testchaine order by 1" cela me
donne
> le résultat suivant :
>
> lib
> -----
> 000
> a-a
> aaa
> abb
> a-d
>
> si je remplace le '-' par un autre caractère (par exemple '_') le même
> select donne :
>
> lib
> -----
> 000
> a_a
> a_d
> aaa
> abb
>
> ce qui me parrait être un comportement bcp + "normal".
>
> Pour info : SQL Server 2000 (installation par défaut), SP3, collation
> FRENCH_CI_AS
>
>
> Si quelqu'un voit d'où cela peut provenir...
>
>
> Merci
>
> Kevin.
>
>