Avatar billede axkris Nybegynder
16. august 2005 - 20:00 Der er 6 kommentarer og
1 løsning

Konvertere vb-script til sql-funktion

Hej alle

Jeg har følgende vb-script, som jeg skal have lavet om til en indbygget sql-funktion, som skal indsættes i sql-serveren, som en indbygget funktion, hvis det er det, som det hedder.

Nogle, som kan hjælpe - kan ikke selv komme i gang og få noget til at virke.

Her er mit oprindelige vb-script:

<%

function findDomain(strFindDomainUrl, strSpecial)
   
    'gør alle tegn små og undgår null-værdier   
    strFindDomainUrl = lcase(trim(strFindDomainUrl & ""))

    'erstatter "," med "." hvis bruger har tastet forkert
    strFindDomainUrl = replace(strFindDomainUrl, ",", ".")
   
    'sletter unødvendige ting
    strFindDomainUrl = replace(strFindDomainUrl, "http://", "")
    strFindDomainUrl = replace(strFindDomainUrl, "https://", "")
    strFindDomainUrl = replace(strFindDomainUrl, "www.", "")
       
    if strFindDomainUrl <> "" then
        if inStr(strFindDomainUrl, "/") > 0 then
            strFindDomainUrl = left(strFindDomainUrl, inStr(strFindDomainUrl, "/") - 1)   
        end if
           
        if strSpecial = "excludeSubdomain" then
           
            'skal kun slette det sidste subdomæne-punktumet
            'og ikke landekode-punktumet, som det gør, hvis
            'man putter en url ind med kun et punktum - f.eks. min "hjemmeside.dk"
            if inStr(strFindDomainUrl, ".") > 0 then
                strFindDomainUrl = left(strFindDomainUrl, inStr(strFindDomainUrl, ".") - 1)
            end if
        end if
       
        findDomain = strFindDomainUrl
    else
        findDomain = ""
    end if
   
    'gør rent   
    strFindDomainUrl = ""

end function

%>
Avatar billede arne_v Ekspert
16. august 2005 - 21:54 #1
den er ikke lavet helt færdigt men jeg tror at du kan se logikken:

CREATE FUNCTION find_domain(@url VARCHAR(255))
RETURNS VARCHAR(255)
AS
BEGIN
    DECLARE @temp VARCHAR(255)
    SET @temp = LOWER(RTRIM(LTRIM(@url)))
    SET @temp = REPLACE(@temp,'http://','')
    SET @temp = REPLACE(@temp,'https://','')
    SET @temp = REPLACE(@temp,'www.','')
    IF CHARINDEX('/',@temp) > 0
    BEGIN
        SET @temp = LEFT(@temp,CHARINDEX('/',@temp)-1)
    END
    RETURN @temp
END
GO
Avatar billede arne_v Ekspert
16. august 2005 - 21:55 #2
1> select test.dbo.find_domain('http://www.vajhoej.dk/index.html')
2> go
---------------------------------------
vajhoej.dk







(1 row affected)
1>
Avatar billede axkris Nybegynder
16. august 2005 - 22:29 #3
Wow - takker - så er jeg i gang :-)

Vender tilbage, når jeg har afprøvet det :-)
Avatar billede axkris Nybegynder
16. august 2005 - 23:15 #4
'findDomain' is not a recognized function name.

Jeg indsatte den og jeg kan den under "User definded functions" under den database, som jeg skal bruge den i. Jeg omdøbte blot navnet på funktionen fra find_domain til findDomain, ellers ændrede jeg ikke noget. Jeg har overdraget funktionen til den rette database-bruger (adgang), så der burde ikke være noget. Så hvad gør jeg galt?

Min kode er:
strSQL = "SET DATEFORMAT DMY" & vbNewLine & _
    "SELECT E.NEWURL, COUNT(D.[Date]) AS COUNTER" & vbNewLine & _
    "FROM (SELECT ID, URL, findDomain(Url) AS NEWURL, LOCATION, CATEGORY" & vbNewLine & _
    "FROM KALENDER_EVENTS) E LEFT OUTER JOIN KALENDER_DATES D ON E.ID = D.EventID AND D.[Date] >= '01/" & navmonth & "/" & navyear & "' AND D.[Date] <= '01/" & navmonthTemp & "/" & navyearTemp & "'" & vbNewLine & _
    "AND (E.LOCATION IN (" & strLocations & ")) AND (E.CATEGORY in (" & strCategories & "))" & vbNewLine & _
    "WHERE EXISTS" & vbNewLine & _
    "    (SELECT P.URL" & vbNewLine & _
    "    FROM PLUSPROFIL_ANNONCE P" & vbNewLine & _
    "    WHERE (P.UsedPoints < P.OrderPoints) AND P.URL LIKE '%' + E.NEWURL + '%' AND LEN(E.URL) > 5)" & vbNewLine & _
    "GROUP BY E.NEWURL" & vbNewLine & _
    "ORDER BY COUNTER DESC"
Avatar billede arne_v Ekspert
16. august 2005 - 23:18 #5
prøv og brug

databasenavn.brugernavn.findDomain

ligesom jeg brugte:

test.dbo.find_domain
Avatar billede axkris Nybegynder
17. august 2005 - 10:01 #6
Mange tak :-) Det virker :-) Tryk svar :-)

Det er utroligt effektivt at lægge sådanne funktioner ind i databasen, og det kører meget mere effektivt nu og jeg sparer en masse unødvendig kodning.
Avatar billede arne_v Ekspert
17. august 2005 - 10:04 #7
kommer her
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