Avatar billede da_darkside Nybegynder
22. juli 2005 - 20:57 Der er 12 kommentarer og
2 løsninger

select poster som starter med bestemt bogstav

Mit spørgsmål lyder på hvordan laver man en sql select hvor man eks kun trækker de poster ud af en access database som starter med eks A
Avatar billede nielle Nybegynder
22. juli 2005 - 21:05 #1
SELECT * FROM personer WHERE forNavn LIKE 'N%'
Avatar billede nielle Nybegynder
22. juli 2005 - 21:06 #2
Jeg kan ikke lige huske om Access også (eller i stedetfor) bruger *:

SELECT * FROM personer WHERE forNavn LIKE 'N*'
Avatar billede nielle Nybegynder
22. juli 2005 - 21:09 #3
... og hvis du er ligeglad med om det er store eller små bogstaver:

SELECT * FROM personer WHERE lower(forNavn) LIKE 'n%'
Avatar billede busschou Praktikant
22. juli 2005 - 21:13 #4
access bruger %
og ideen med syntaksen er at % fortæller om man er ligeglad med det som kommer efter eller før
Select * From personer Where forNavn Like '%A%'
vil således vælge alle dem hvor A blot indgår
Select * From personer Where forNavn Like '%A'
vil tilsvarende vælge alle dem hvor navnet slutter på A
Avatar billede busschou Praktikant
22. juli 2005 - 21:22 #5
og så kan man bruge _ hvis man vil lave et "wildcard"
Jeg kan se efter lidt surfen at nielle måske har ret
Så vidt jeg kan forstå vil ældre versioner af access kræve * frem for % og tilsvarende ? istedet for _
Avatar billede da_darkside Nybegynder
22. juli 2005 - 21:23 #6
Det virker nielle tak :)
Avatar billede nielle Nybegynder
22. juli 2005 - 21:25 #7
Hvis du også vil give point til busschou for hans udemærkede forklaring ... så er det hejt fint med mig :^)

... og et svar :^)
Avatar billede busschou Praktikant
22. juli 2005 - 21:26 #8
hæhæ det er jo så ik op til mig at bestemme ;o)
Men her er da et svar hvis det er :o)
Avatar billede da_darkside Nybegynder
22. juli 2005 - 23:09 #9
Takker boys, så kommer der lige et tillægs spørgsmål... hvis jeg nu skal have alle de poster som ikke starter på et bogstav men fx 1-9 eller .,;-@£$€{[] osv hvordan klare vi så den for der er som sagt temmeligt mange tegn
Avatar billede busschou Praktikant
23. juli 2005 - 07:20 #10
hmm du kan mig bekendt ikke benytte regulære udtryk i sql og det vil så sige at hvis du ønsker at finde alle dem som starter med et tal fra 1-9 så må du gøre sådan her
--
Select * From tabel Where felt Like '1%' Or felt Like '2%' Or felt Like '3%' Or felt Like '4%' Or felt Like '5%' Or felt Like '6%' Or felt Like '7%' Or felt Like '8%' Or felt Like '8%' Or felt Like '9%'
--
Du kan benytte wilcarden _ hvis der er et tegn i ordet som kan være hvad som helst
--
Select * From tabel Where felt Like 'abe_kat'
--
Den vil fange "abeakat, abebkat, abe1kat, abe&kat" osv osv
Avatar billede busschou Praktikant
23. juli 2005 - 07:27 #11
Men hvis du ønsker at finde så mange forskellige i din database, så kunne det tyde på at du skulle opbygge din database anderledes måske
Eller at du kunne udvælge dem i asp og ikke i access, altså
--
tegn = Array("1","2","3","4","5","6","7","8","9",".",",",";","-","@","£","{","[","]")
set rs = conn.execute("Select * From din_tabel Order By dit_felt"
do while not rs.eof
  lovlig = False
  For i=0 To Ubound(ulovligeTegn)
    if tegn(i) = Left(rs("dit_felt"),1) then
      lovlig = True
      exit For
    end if
  Next
  if lovlig then
    response.write "ordet "&rs("dit_felt")&" starter med et tilladt tegn"
  else
    response.write "ordet "&rs("dit_felt")&" starter ikke med et tilladt tegn"
  end if
  rs.movenext
loop
----
på den måde kan du tilegne dig fuldstændig hvilke tegn du vil have de starter med
Det skal så siges at ovenstående kan gøres i regulært udtryk, meget mere kompakt at se på, men afhængig af brugeren måske ikke så forståeligt at se på
Avatar billede busschou Praktikant
23. juli 2005 - 07:35 #12
med regulært udtryk kan det gøres sådan her
--
set rs = conn.execute("Select * From din_tabel Order By dit_felt"
Set regEx = New RegExp
regEx.Pattern = "^[^a-zA-ZæøåÆØÅ].*$"
do while not rs.eof
  if regEx.Test(rs("dit_felt")) then
    response.write "Ordet "&rs("dit_felt")&" starter ikke med et bogstav a-z eller A-Z eller æ,ø,å eller ÆØÅ "
  end if
  rs.movenext
loop
Avatar billede nielle Nybegynder
23. juli 2005 - 08:47 #13
Der er ikke nogen nem løsning på problemet.

Jeg tror at jeg ville løse det ved at tilføje en  ekstra kolonne til tabellen – BeholdDenne. Så ville jeg lave en for-løkke i ASP som gennemløb 'a' til 'z', 'æ', 'ø' og 'å' samt andre tegn du gerne ville beholde. For hvert lovligt startbogstav ville jeg køre SQL'en:

SQL = ”UPDATE personer SET beholdDenne = 'ja' WHERE forNavn LIKE 'N%'

Tilsidst ville jeg så slette alle de rækker som ikke havde 'ja' (eller true eller hvad det kunne være du valgte) i feltet:

SQL = ”DELETE FROM personer WHERE beholdDenne <> 'ja'”


NB: Jeg kan forstå at du har en tabel som er blevet ”forurenet” med ulovlige navne, og at du nu vil have ryddet op i denne. I så fald er hele øvelsen vel en engangs-ting? Måske kan det bedre betale sig simpelthen at gøre det manuelt...

For at undgå at det gentager sig i fremtiden bør du tjekke på navne, *før* at de løgges i databasen, og så afvise de som ikke er lovlige.
Avatar billede da_darkside Nybegynder
23. juli 2005 - 10:28 #14
Tak, men da de kan starte på alle tegn i tegn sættet orker jeg virkelig ikke at lave en array med de forskellige tegn, og da der er temmeligt mange poster i databasen, vil det være helt vildt at køre det hele ud...

så tror jeg tager den via denne løsning SELECT Current_name,US_Status,ID FROM User_DB WHERE Current_Name Not LIKE 'A*' and Not LIKE 'B*' and Not LIKE 'C*'  osv osv...
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
Kurser inden for grundlæggende programmering

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