Avatar billede sumokadet Nybegynder
14. december 2005 - 22:39 Der er 9 kommentarer og
1 løsning

Select-query: Find f.eks. A-K, K-Z

Jeg har en database med et VARCHAR(25)-felt, som vi kan kalde for OVERSKRIFT. Den indeholder forskellige overskrifter. Der er (desværre) ikke krav om nogen case på det første bogstav.

Det jeg har brug for er en SELECT-query, der finder alle de poster, hvor OVERSKRIFT's første bog ligger mellem f.eks. A-K. Den skulle gerne være case-insensitive, så store og små bogstaver bliver sorteret sammen...

Det kunne bare være mega cool!
På forhånd tak for hjælpen!
Avatar billede master_orion Nybegynder
14. december 2005 - 22:50 #1
Prøv at kig på de 2 kommandoer der hedder BETWEEN og LIKE de skulle kunne gøre tricket med at få alt mellem 2 bogstaver. Hvis du derefter laver en ORDER BY, skulle jeg mene at den pr. default giver dig først alle med stort A og derefter lille a stort B og lille b.
Håber det var en lille hjælp
Avatar billede sumokadet Nybegynder
14. december 2005 - 22:59 #2
Kan godt være jeg er en nybegynder, så: hvordan laver jeg så between og like på kun det første bogstav i mit varchar-felt?
Avatar billede master_orion Nybegynder
14. december 2005 - 23:12 #3
"SELECT * FROM tabelNavn WHERE foo BETWEEN 'LIKE 'a%'' AND 'LIKE 'k%'' ORDER BY foo";

Du må ikke hænge mig på om der skal sættes nogle {} eller andet omkring LIKE 'a%', før det kommer til at fungere men BETWEEN funger ved BETWEEN 'A' AND 'B' og LIKE ved LIKE'foo%' hvor % virker som joker så hvis du vil have alt der starter med A skriv A%, hvis du vil have alt der neder på en skriv LIKE '%en'

Nu hvor jeg sidder og tænker over det kan det måske være at du kan slippe for at bruge like. Hvis der ikke er en anden som svare må du desværre prøve dig lidt frem.
Avatar billede pgroen Nybegynder
15. december 2005 - 08:29 #4
I Oracle ville man skrive noget á la:

SELECT overskrift
  FROM tabel
WHERE UPPER (SUBSTR (overskrift, 1, 1)) BETWEEN 'A' AND 'K';
Avatar billede sumokadet Nybegynder
15. december 2005 - 18:04 #5
WHERE foo BETWEEN 'a%' AND 'k%' virker fint. Tak for hjælpen :-)
Avatar billede sumokadet Nybegynder
15. december 2005 - 18:05 #6
Det var lidt en blanding af jeres begges forslag, men nu kom jeg til at give alle points til pgroen. Jeg ville også godt give lidt til master_orion. Kan jeg det?
Avatar billede master_orion Nybegynder
15. december 2005 - 18:11 #7
Hvis jeg havde lagt et svar ind kunne du have gjort det, men det er helt lige meget... Du fik løst dit problem og det er det vigtigste.. :)
Avatar billede sumokadet Nybegynder
15. december 2005 - 22:35 #8
Jeg har fundet ud af, at der er et lidt kristisk problem ved følgende
WHERE foo BETWEEN 'a%' AND 'k%'

Den henter alle poster der starter med A og til og med dem der starter med J, og ikke som man skulle tror af A-K. Dette kan jeg sådan set godt håndtere, spørgsmålet er bare hvordan den så ser ud, når man vil hente alt fra O-Å, som så kun vil gå til Æ.

Nogen der har en klog løsning på dette?
(Jeg bruger en MySQL-database)
Avatar billede master_orion Nybegynder
15. december 2005 - 22:48 #9
Jeg har ingen idé om hvorfor den ikke tager k med. Du kan se et simpelt eksempel her http://www.plus2net.com/sql_tutorial/sql_between.php  Det er godt nok med tal men bør være helt det samme for bogstaver.

Hvis du vil finde ud af om du får Å med i din range så kan du jo evt. smide noget dummy data ind i din database.
Avatar billede pgroen Nybegynder
16. december 2005 - 09:08 #10
Det er fordi den ikke opfatter '%' som wildcard i denne sammenhæng
- dvs 'kat' er større end 'k%', og kommer derfor ikke med.

og derfor virker det bedre med substr-løsningen, som skitseret ovenfor...
(aner ikke om det hedder 'substr' i MySQL, men ellers er der garanteret en tilsvarende funktion)
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