Avatar billede okd Nybegynder
02. august 2012 - 21:47 Der er 6 kommentarer og
1 løsning

MySQL - ORDER BY (case??)

Hej,

Er der ikke en venlig sjæl der kan fortælle mig hvordan jeg kan sortere på store/små bogstaver, sådan at jeg altid får små først.

Jeg har en tabel med brugernavne, hvoraf nogen eksisterer både med små og store bogstaver. Når jeg sorterer efter navn, så kommer de altid i samme rækkefølge uanset om jeg vælger ASC eller DESC, som vist herunder. Nogen 'par' (der hvor de findes på begge måder) listes med små bogstaver først, og andre med store først, men altid på samme måde!

SELECT name
FROM users
ORDER BY name ASC;

giver:
------
aaa
BBB
bbb
ccc
CCC
DDD

SELECT name
FROM users
ORDER BY name DESC;

giver:
------
ddd
ccc
CCC
BBB
bbb
aaa


Hvordan løser jeg det? så resultatet altid bliver:
aaa
bbb
BBB
ccc
CCC
ddd
Avatar billede trini Nybegynder
02. august 2012 - 23:07 #1
Hvis du vil sortere case-sensitivt kan du bruge 'ORDER BY BINARY'.

Store bogstaver sorteres normalt før små, også med binary. Så hvis du vil have det modsatte, skal der vist en lidt mere kompliceret løsning til...
Avatar billede okd Nybegynder
03. august 2012 - 08:19 #3
tak!

ORDER BY name ASC, BINARY name DESC

gør lige det jeg søger :)
Avatar billede arne_v Ekspert
03. august 2012 - 22:20 #4
Det tvivler jeg meget paa!

:-)
Avatar billede okd Nybegynder
03. august 2012 - 22:32 #5
Arne, Jeg har prøvet det af i dag, og det virker fint. Men du må meget gerne uddybe hvorfor du ikke mener det virker.
Avatar billede arne_v Ekspert
03. august 2012 - 23:02 #6
prov og koer:

CREATE TABLE s (
  v VARCHAR(10)
);

INSERT INTO s VALUES('EE');
INSERT INTO s VALUES('ee');
INSERT INTO s VALUES('Ee');
INSERT INTO s VALUES('eE');
INSERT INTO s VALUES('ED');
INSERT INTO s VALUES('DE');
INSERT INTO s VALUES('EF');
INSERT INTO s VALUES('FE');
INSERT INTO s VALUES('ÉÉ');
INSERT INTO s VALUES('Éé');
INSERT INTO s VALUES('éÉ');
INSERT INTO s VALUES('éé');
INSERT INTO s VALUES('EÉ');
INSERT INTO s VALUES('ÉE');
INSERT INTO s VALUES('Eé');
INSERT INTO s VALUES('éE');
INSERT INTO s VALUES('Ée');
INSERT INTO s VALUES('eÉ');
INSERT INTO s VALUES('eé');
INSERT INTO s VALUES('ée');

SELECT v FROM s ORDER BY v ASC, BINARY v DESC;

og se om du kan lide resultatet.
Avatar billede okd Nybegynder
03. august 2012 - 23:25 #7
OK, jeg kan se hvad du mener. :-)

Men i mit tilfælde vil der ALDRIG forekomme specialtegn. Kun [a-z], [A-Z], [0-9]. Og her giver det præcis det resultat jeg ønsker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester