Avatar billede jss Nybegynder
01. juli 2005 - 10:59 Der er 8 kommentarer og
1 løsning

Funktion i SQL-sætning

Hej
Kan man bruge funktioner i sql-sætninger - f.eks. har jeg brug for at fjerne visse ord fra feltet butik i forbindelse med DISTINCT.

Jeg har prøvet med Replace i selve sql-sætning samt at lave en funktion der replacer de uønskede ord, men det funger ikke ;-(

strSQL="SELECT DISTINCT(butik),PID,postnr FROM butikker ORDER BY butik"
Avatar billede jss Nybegynder
01. juli 2005 - 11:17 #1
Databasen er Access ...
Avatar billede nielle Nybegynder
01. juli 2005 - 17:39 #2
Kunne du give nogle eksempler på hvad du ønsker?
Avatar billede jss Nybegynder
04. juli 2005 - 08:56 #3
Eksempler kunne være "Shop Vejle" og "Horsens Filial", som jeg ønsker skal være hhv. "Vejle" og "Horsens". Derudover er DISTINCT ikke længere nødvendig i min sql-sætning, som gerne skulle komme til at ligne dette:

strSQL="SELECT [FUNKTION(butik)],PID,postnr FROM butikker ORDER BY [FUNKTION(butik)]"
Avatar billede nielle Nybegynder
04. juli 2005 - 22:36 #4
Den er nok ikke lige til, specielt ikke når din funktion ikke er så forudsigelig – nogen gange skal den tage det første ord, andre gange det sidste og andre gange igen måske noget helt tredje.

En simpel mulighed kunne dog være at udvide din tabel med et ekstra felt som du jo f.eks. kunne kalde funktion_butik. Derefter laver du din funktion i almindelig ASP. Denne bruger du til at lægge en værdi i feltet funktion_butik:

<%
SQL1 = "SELECT butik, butik_id FROM butikker"
set rs = Conn.Execute(SQL1)

do while not rs.eof
    SQL2 = "UPDATE butikker SET funktion_butik='" & DinFunktion(rs("butik")) & "' WHERE butik_id=" & rs("butik_id")
    Conn.Execute(SQL1)

    rs.MoveNext
loop
%>

Denne lille sekvens skal du så bare kære engang hver gang at du har opdateret din tabel butikker med noget nyt.

Derefter kan du så opnå din ønskede effekt med:

strSQL = "SELECT funktion_butik, PID, postnr FROM butikker ORDER BY funktion_butik"

Jeg håber at det gav mening for dig?
Avatar billede jss Nybegynder
05. juli 2005 - 09:06 #5
Det giver fin mening, selvom det selvfølgeligt er ærgerligt at man ikke kan lave funktionen i det direkte kald. Men løsningen kan sagtens bruges, specielt fordi det er sjældent at der skal ændres i butik-tabellen og antallet af varianter der skal "replaces" er til at overskue.
Så læg endeligt et svar :-)
Avatar billede nielle Nybegynder
06. juli 2005 - 08:33 #6
Jeg sagde nu ikke at det ikke kunne lade sig gøre i SQL. Det aner jeg faktisk ikke, men jeg har ikke kunnet finde noget på nettet.

Men min erfaring ang. lignende problemstillinger, ville det imidlertid ikke have været nogen specielt ”pæn og simpel” løsning, og min vurdering er at ASP-løsningen er meget mere simpel og overskuelig. Specielt siden at funktionen ikke er meget simpel. SQL har nemlig aldrig været tænkt som et decideret programmeringssprog.
Avatar billede nielle Nybegynder
06. juli 2005 - 08:34 #7
... og et svar :^)
Avatar billede jss Nybegynder
06. juli 2005 - 08:55 #8
Helt enig - jeg tror også på simple og overskuelige løsninger, som den rette vej frem i livet.
Men mit spørgsmål opstod i kølvandet på et andet indlæg her på eksperten jeg fandt i min søgning (http://www.eksperten.dk/spm/109197). Løsningen på dette indlæg lykkedes det mig ikke at få til at virke i Access, så derfor dette spørgsmål (også af ren nysgerrighed efter at lære mere).
Her og nu bruger jeg dit forslag for at jeg kan blive færdig med mit projekt - så jeg kan få holdt sommerferie :-)
Avatar billede nielle Nybegynder
06. juli 2005 - 19:15 #9
Foruden at den er simpel, giver den også et performanceløft idet funktion() jo så ikke skal kaldes i forbindelse med hvert eneste SELECT på din tabel.

Ahhh, sommerferie. :^)
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