OVH Cloud OVH Cloud

UNION et case sensitive...

7 réponses
Avatar
Eric B
voilà sous SQL 2000, je tente de faire ce genre de chose :

select UserName, UPPER([Password]) as 'pwd' from Users
UNION
select UserName, LOWER([Password]) from Users

En gros, la requête retourne les lignes de la table en double, l'une avec le
password en minuscule, l'autre avec le password en majuscule.

Mais ça ne marche pas, mon serveur étant configuré en "case insensitive", le
UNION considère que les lignes sont identiques et supprime les doublons,
donc il ne me reste que les mots de passe en minuscule...

Quelqu'un sait comment configurer l'union pour qu'il fonctionne en case
sensitive ? ( je pourrais utiliser une table temporaire, mais j'aimerais
éviter si possible)

Merci !
EB

7 réponses

Avatar
Synopsis
En utilisant la clause COLLATE qui permet de changer le classement

--
SELECT monChamp collate french_ci_ai
FROM maTable1
UNION
SELECT monChamp collate french_ci_ai
FROM maTable2


La fonction fn_helpcollations() permet de lister les classements disponibles

--
SELECT *
FROM ::fn_helpcollations()







"Eric B" a écrit dans le message de
news:
voilà sous SQL 2000, je tente de faire ce genre de chose :

select UserName, UPPER([Password]) as 'pwd' from Users
UNION
select UserName, LOWER([Password]) from Users

En gros, la requête retourne les lignes de la table en double, l'une avec


le
password en minuscule, l'autre avec le password en majuscule.

Mais ça ne marche pas, mon serveur étant configuré en "case insensitive",


le
UNION considère que les lignes sont identiques et supprime les doublons,
donc il ne me reste que les mots de passe en minuscule...

Quelqu'un sait comment configurer l'union pour qu'il fonctionne en case
sensitive ? ( je pourrais utiliser une table temporaire, mais j'aimerais
éviter si possible)

Merci !
EB





Avatar
Eric B
Effectivement ça marche avec :

select UserName, UPPER([Password]) COLLATE SQL_Latin1_General_CP1_CS_AS as
'pwd' from Users
UNION
select UserName, LOWER([Password]) COLLATE SQL_Latin1_General_CP1_CS_AS
from Users

Merci !
Avatar
Sylvain Lafontaine
Tu peux également ajouter l'option ALL après l'instruction UNION; ce qui va
désactiver le Group By implicite.

S. L.

"Eric B" wrote in message
news:
Effectivement ça marche avec :

select UserName, UPPER([Password]) COLLATE SQL_Latin1_General_CP1_CS_AS
as 'pwd' from Users
UNION
select UserName, LOWER([Password]) COLLATE SQL_Latin1_General_CP1_CS_AS
from Users

Merci !






Avatar
Fred BROUARD
Au passage, c'est une hérésie que de définir une colonne de mot de passe avec
une collation insensible.

A lire sur le sujet :
http://sqlpro.developpez.com/cours/sqlserver/collations/

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 *************************


Eric B a écrit:
voilà sous SQL 2000, je tente de faire ce genre de chose :

select UserName, UPPER([Password]) as 'pwd' from Users
UNION
select UserName, LOWER([Password]) from Users

En gros, la requête retourne les lignes de la table en double, l'une avec le
password en minuscule, l'autre avec le password en majuscule.

Mais ça ne marche pas, mon serveur étant configuré en "case insensitive", le
UNION considère que les lignes sont identiques et supprime les doublons,
donc il ne me reste que les mots de passe en minuscule...

Quelqu'un sait comment configurer l'union pour qu'il fonctionne en case
sensitive ? ( je pourrais utiliser une table temporaire, mais j'aimerais
éviter si possible)

Merci !
EB





Avatar
Sylvain Lafontaine
Oui, mais qui dit hérésie dit aussi religion.

S. L.

"Fred BROUARD" wrote in message
news:
Au passage, c'est une hérésie que de définir une colonne de mot de passe
avec une collation insensible.

A lire sur le sujet :
http://sqlpro.developpez.com/cours/sqlserver/collations/

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 *************************


Eric B a écrit:
voilà sous SQL 2000, je tente de faire ce genre de chose :

select UserName, UPPER([Password]) as 'pwd' from Users
UNION
select UserName, LOWER([Password]) from Users

En gros, la requête retourne les lignes de la table en double, l'une avec
le password en minuscule, l'autre avec le password en majuscule.

Mais ça ne marche pas, mon serveur étant configuré en "case insensitive",
le UNION considère que les lignes sont identiques et supprime les
doublons, donc il ne me reste que les mots de passe en minuscule...

Quelqu'un sait comment configurer l'union pour qu'il fonctionne en case
sensitive ? ( je pourrais utiliser une table temporaire, mais j'aimerais
éviter si possible)

Merci !
EB








Avatar
bruno reiter [MVP]
et qui dit religion dit intégrisme

br

"Sylvain Lafontaine" <sylvain aei ca (fill the blanks, no spam please)>
wrote in message news:
Oui, mais qui dit hérésie dit aussi religion.

S. L.

"Fred BROUARD" wrote in message
news:
> Au passage, c'est une hérésie que de définir une colonne de mot de passe
> avec une collation insensible.
>
> A lire sur le sujet :
> http://sqlpro.developpez.com/cours/sqlserver/collations/
>
> 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 *************************
>
>
> Eric B a écrit:
>> voilà sous SQL 2000, je tente de faire ce genre de chose :
>>
>> select UserName, UPPER([Password]) as 'pwd' from Users
>> UNION
>> select UserName, LOWER([Password]) from Users
>>
>> En gros, la requête retourne les lignes de la table en double, l'une


avec
>> le password en minuscule, l'autre avec le password en majuscule.
>>
>> Mais ça ne marche pas, mon serveur étant configuré en "case


insensitive",
>> le UNION considère que les lignes sont identiques et supprime les
>> doublons, donc il ne me reste que les mots de passe en minuscule...
>>
>> Quelqu'un sait comment configurer l'union pour qu'il fonctionne en case
>> sensitive ? ( je pourrais utiliser une table temporaire, mais


j'aimerais
>> éviter si possible)
>>
>> Merci !
>> EB
>>
>>
>>
>




Avatar
Eric B
"Fred BROUARD" a écrit dans le message de news:

Au passage, c'est une hérésie que de définir une colonne de mot de passe
avec une collation insensible.

A lire sur le sujet :
http://sqlpro.developpez.com/cours/sqlserver/collations/

A +




Salut Fred, toujours en train de râler, à ce que je vois... mmm ?

Certes, ça peut paraitre bizarre, mais bon, on ne t'a jamais demandé de
faire des trucs bizarres "parce que l'application marche comme ça et qu'on
peut pas la changer" ? ;)

EB
http://ebweb.org