Avatar billede nhoff Nybegynder
25. oktober 2006 - 16:00 Der er 3 kommentarer og
1 løsning

Function eller SP til behandling af tekststreng

Jeg modtager hver dag en række URL'er som skal filtreres og lægges i en SQL-database.

I korte træk er det sådan, at i en given URL vil der altid være et "leverandoerID", f.eks.  "http://www.blablabla.dk/asp?leverandoerID=1234&amp...."

Længden af URL kan variere og jeg vil gerne udtrække "1234". Hvordan laver jeg en user defined function eller en stored procedure, der gør dette ved blot at blive forsynet med den givne URL? Det er noget med charindex/left/right, men jeg er ikke tilstrækkelig fortrolig med syntaksen omkring stored procedures og/eller user defined functions til at kunne regne ud hvordan det præcis skal gøres.
Avatar billede janus_007 Nybegynder
25. oktober 2006 - 22:50 #1
Måske sådan her:



create function dbo.udf_get_querystring_value(@url varchar(255), @querystringname varchar(128))

returns varchar(255)
as
begin
    declare @patindex int
    set @patindex = patindex('%' + @querystringname + '%', @url)
   
    return substring(@url, @patindex + len(@querystringname), patindex('%&%', substring(@url, @patindex + len(@querystringname), len(@url)))-1 )

end


Og kaldes med:
select dbo.udf_get_querystring_value('http://www.blablabla.dk/asp?leverandoerID=1234&amp....', 'leverandoerID=')
Avatar billede nhoff Nybegynder
26. oktober 2006 - 12:30 #2
Det er jo fornemt!
Har du mulighed for kort at forklare, hvad der sker? Jeg er selvfølgelig bekymret for, hvad der sker hvis der f.eks. 2 gange i URL'en optræder 'leverandoerID=' (om end det næppe sker)
- Og hvad gør patindex?
Avatar billede janus_007 Nybegynder
26. oktober 2006 - 13:23 #3
joda...
Patindex tager returnerer startindexet på den første forekomst af en given tekst.

Dvs. hvis jeg skal kigge i en streng, lad os sige 'Dengang vi drog...' og jeg kigger efter 'vi', vil jeg få returneret et index der fortæller mig hvor 'vi' starter, i det tilfælde her altså 9.

Den viden kigger jeg så efter leverandoerID= med, men i og med jeg skal have det der står bagefter leverandoerID= må jeg altså lægge længden af leverandoerID= til vha. len('leverandoerID=')

Substring cutter blot det ønskede ud efter nogle givne indexes, som i funktionen er beregnet vha. patindex :-)

Hvis leverandoerID optræder flere gange vil du kun få den første værdi vha. funktionen. Hvis det sker skal du også lave en pagelogic der kan håndtere den slags scenarie... så det sker sikkert ikke som du siger.

Stort set alt kan laves i funktioner og T-sql, men hvis du har meget af den slags logik, burde du nok lægge logikken i din kode... .NET, JAVA, PHP eller hvad du nu sidder med, SQLServeren er nemlig ikke optimeret til sådan strengmanipulation og kan resultere i overhead :-|

Håber du fik svar, ellers skriv igen.
Avatar billede nhoff Nybegynder
26. oktober 2006 - 14:13 #4
Tusind tak for den fine forklaring!
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