Avatar billede kurtpedersen Nybegynder
29. august 2003 - 15:33 Der er 18 kommentarer og
2 løsninger

Giv mig de rækker, hvis begyndelsesbogstav er Æ, Ø eller Å

Hej, jeg har et simpelt problem som volder mig store kvaler at løse:

Jeg har en tabel, hvor jeg har nogle titler. Jeg vil gerne udtrække de rækker, der starter med forskellige bogstaver.

Det går fint med bogstaverne A-Z - men så heller ikke længere.

Findes der en metode, hvor man kan udtage det første tegn fra et access-felt og spørge på det - uden først at udtage alle rækker og dernæst kassere dem, der ikke skal bruges?

Den metode jeg bruger fungerer således:

SELECT * from post where (titel >=bogstav and titel < chr(asc(bogstav)+1))

det går godt, når man tager udgangspunkt i ansi-tegntabellen (som chr og asc bruger) - MEN det gør jeg ikke; jeg vil nemlig gerne sortere æ, ø og å korrekt så jeg kører med dansk/norsk tegnsæt fra access - og det supporteres ikke af chr og asc.

Æ og Ø kan jeg så klare, idet jeg ved at næste tegn er hhv Ø og Å - men den går ikke med Å.

Helt generelt har jeg nogle kategorier der ser således ud:

"A B"      : Skaf mig alle poster startende med A eller B
"C D E F"  : Skaf mig alle poster med C, D, E eller F
osv
"S"  Skaf mig alt med S
"U V W X Z Æ Ø Å" Saf mig alt med bogstav U,V.. osv
"Andre"    : Skaf mig alle, der ikke starter med et bogstav. (tal eller specieltegn)

Jeg har prøvet flere metoder, men alle giver de op specielt overfor Å.

Er der nogen, der har en idé til hvordan det kan laves i access og/eller kombineret med asp?
Avatar billede codebase Praktikant
29. august 2003 - 15:40 #1
fir ( i=1; 28 >= i; i++)
{
SELECT SUBSTRING('abcdefghijklmnopqrstuvxyzæøå', i, 1) AS c,
COUNT(ID) AS num FROM domain WHERE LEFT (name , 1) = SUBSTRING('abcdefghijklmnopqrstuvxyzæøå', i, 1)
}
Avatar billede mugs Novice
29. august 2003 - 15:45 #2
En udvælgelsesforespørgsel i Access kan se således ud:

SELECT Tabel1.felt1
FROM Tabel1
WHERE (((Tabel1.felt1) Like "å*"));
Avatar billede mugs Novice
29. august 2003 - 15:47 #3
SELECT Tabel1.felt1
FROM Tabel1
WHERE (((Tabel1.felt1) Like "å*" Or (Tabel1.felt1) Like "ø*"));
Avatar billede kurtpedersen Nybegynder
29. august 2003 - 20:04 #4
Mugs - din løsning ser pæn ud - men den virker desværre ikke. Nu kan jeg ikke se at du skriver 2 gnyffer eller anførselstegn - begge dele giver syntaksfejl. Ved brug af enkeltgnyf kan det køres - men der findes ingen rækker - og jeg VED at der er en post, der hedder noget med "Ål..."
Avatar billede mugs Novice
29. august 2003 - 20:09 #5
Mit forslag er afprøvet og fungerer efter hensigten i en Access database. Hvorfor den ikke fungerer hos dig, kan jeg ikke svare på. Måske har du implementeret den i ASP, og det kender jeg intet til.
Avatar billede mugs Novice
29. august 2003 - 20:09 #6
Det er ikke gnyffer men anførselstegn.
Avatar billede kurtpedersen Nybegynder
29. august 2003 - 20:10 #7
codebase : det ligner C++, det er også ok. Jeg har dog ikke gode erfaringer med brug af left i sql (jeg har prøvet, og det ville klart være en pæn løsning) - men sql'et ved ikke hvad left er (det er ikke et felt på tabellen).

Så jeg kan heller ikke give points her desværre.
Avatar billede kurtpedersen Nybegynder
29. august 2003 - 20:12 #8
mugs: ok - så er den lidt tricky - for mine sql'er eksekverer jeg med en Set objRS = myConn.Execute(strSQL) - hvor strSQL er strengen med SQL - og den kan ikke indeholde gåsetegn (betyder jo slut på streng) - men måske en replace kan gøre det - jeg prøver lige...
Avatar billede mugs Novice
29. august 2003 - 20:14 #9
Jeg har heller ikke forstand på C++, men når codebbase skriver således:

WHERE LEFT (name , 1

Antager jeg, at LEFT er en funktion, som uddrager 1 tegn fra venstre i domænet name.
Avatar billede kurtpedersen Nybegynder
29. august 2003 - 20:17 #10
mugs : jep - men inde i en sqlstr kan man ikke bruge left - det var faktisk det første jeg forsøgte mig med:

strSQL = " SELECT * FROM POST WHERE " & LEFT(" & " titel " & ",1) IN ('Æ','Ø','Å') ORDER BY TITEL "
Avatar billede kurtpedersen Nybegynder
29. august 2003 - 20:21 #11
mugs: det med replace så jeg kan skrive gåseøjne går heller ikke i en replace :-(

Kan vi lave et sammensurium af din og min løsning får du pointene - men der må ikke være syntaksfejl.
Avatar billede kurtpedersen Nybegynder
29. august 2003 - 20:24 #12
jeg fandt løsningen : strSQL = " SELECT * FROM POST WHERE " & " LEFT(titel,1) IN ('Æ','Ø','Å') ORDER BY TITEL " :-)
Avatar billede mugs Novice
29. august 2003 - 20:25 #13
Jeg er ikke interesseret i pointene. Jeg har intet forstand på hverken C++ eller ASP, så jeg ved dårlig nok hvad jeg taler om her. Men jeg har jo offentliggjort min SQL-sætning , så den kan du jo blot bruge.

Men det var måske også en ide, at flytte spørgsmålet til ASP-kategorien.
Avatar billede mugs Novice
29. august 2003 - 20:26 #14
FINT ;o)
Avatar billede kurtpedersen Nybegynder
29. august 2003 - 20:31 #15
mugs - du kan godt få halvdelen - du fik alligevel hjulpet mig lidt på vej ;o)
Avatar billede mugs Novice
29. august 2003 - 20:33 #16
Så tak da ;o)
Avatar billede mugs Novice
29. august 2003 - 20:34 #17
.
Avatar billede kurtpedersen Nybegynder
29. august 2003 - 20:39 #18
Hvordan giver man halvt points? (er grøn her) ;-)
Avatar billede mugs Novice
29. august 2003 - 20:40 #19
Det er vist nogen med at vælge avanceret og dele point mellem svarerne.
Avatar billede kurtpedersen Nybegynder
29. august 2003 - 20:43 #20
jeg svarer også lige selv
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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