Avatar billede jytte Nybegynder
04. juni 2003 - 13:20 Der er 8 kommentarer og
1 løsning

Kan ORDER BY sortere æ,ø og å alfabetisk korrekt

Når jeg i MS SQL laver en ORDER BY i min sqlsætning kommer æ, ø og å til at blive sorteret på en måde der ser ud som om ordningen går efter ordningen i en ascii-tabel

Mit spørgsmål er nu om der i MS SQL er en form for dansk-indstilling der kan få en ORDER BY til at sortere korrekt alfabetisk (set fra et dansk synspunkt)
Avatar billede bennytordrup Nybegynder
04. juni 2003 - 13:28 #1
order by <FeltNavn> collate Danish_Norwegian_CI_AS

Sortering med hensyntagen til accentuering, men ikke til store/små bogstaver
Avatar billede bennytordrup Nybegynder
04. juni 2003 - 13:29 #2
Det, der sker i denne sortering, er, at databasens/kolonnens collation overstyres.
Avatar billede jytte Nybegynder
04. juni 2003 - 13:47 #3
Tak for svaret -- det kan jeg godt bruge.

Men kan vil du ikke lige forklare mig hvad "databasens/kolonnens collation" betyder ?
Avatar billede bennytordrup Nybegynder
04. juni 2003 - 13:50 #4
SQL Serveren installeres med en collation (sorteringsorden), der vælges på installationstidspunktet.

Denne collation bruges ved oprettelse af (n)varchar/char/text kolonner i tabellerne med mindre, man specifikt angiver en collation i create table statementet.

Collation styrer sorteringen på en select - med mindre, du gør, som jeg angav i order by, nemlig at overstyre collation.

Der kan også angives collation ved sammenligning af tekster. Dette kan være godt, hvis man skal joine mellem tabeller i to forskellige databaser, der har hver deres collation.
Avatar billede jytte Nybegynder
04. juni 2003 - 13:54 #5
Tak for svaret. Det er en god feature at kende.
Avatar billede schwaner Nybegynder
07. oktober 2003 - 18:03 #6
Jeg har forsøgt med følgende sætning men uden held. Hvad gør jeg galt?

select distinct(url), link.tekst, hjalpe_tekst, link_type.file_navn from link, link_type where link.tekst like 'f%' and link_type.id = link.type_id order by link.tekst collate Danish_Norwegian_CI_AS

Jeg får følgende fejlmeddelse:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

Den kører fint hvis jeg undlader
collate Danish_Norwegian_CI_AS
i sætningen.

Nogen forslag?
Avatar billede bennytordrup Nybegynder
08. oktober 2003 - 08:36 #7
prøv

select distinct(url), link.text collate danish_norwegian_ci_as, ...
Avatar billede jytte Nybegynder
08. oktober 2003 - 12:40 #8
Jeg ved ikke om det har noget med sagen at gøre men de steder hvor jeg bruger
  ... order by <FeltNavn> collate Danish_Norwegian_CI_AS
ændrede jeg koden fra
    objRec.Open strSQL, objCon, AdOpenForwardOnly, AdLockReadOnly, AdCmdText
til
    objRec.Open strSQL, objCon, AdOpenStatic, AdLockReadOnly, AdCmdText
for at få det til at virke
Avatar billede bennytordrup Nybegynder
08. oktober 2003 - 12:48 #9
Det har ikke noget at sige - det er kun hvordan recordsettet skal åbnes fra klienten. Din fejl burde også dukke op i Query Analyzer.

Jeg har lige testet selv. Bruger du distinct, skal du have collate med i select på de felter, du bruger collate på i order by. Det hænger sammen med, at SQL Server åbenbart opfatter det som forskellige felter.
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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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