Avatar billede janemil Nybegynder
12. september 2006 - 14:03 Der er 4 kommentarer og
1 løsning

Sindsyg sql jeg ikke helt forstår - finde tekst mellem br tags

Eksempel tekst fra databasen

FreeText1<BR>FreeText2<BR>FreeText3<BR>FreeText4<BR>FreeText5<BR>FreeText6<BR>FreeText7<BR>FreeText8

SQL er fra et ældre program jeg skal lave en rettelse i.
Skal udvide fra:
ClosingText1
ClosingText2
ClosingText3
til 7 mere af slagsen. Har vist sql for ClosingText3. Jeg synes det er noget rod. Hvordan finder jeg lette teksten FreeText4 osv.


ISNULL(CASE " _
                                  & "              WHEN CHARINDEX('<BR>', BANKINFO.ClosingText, 0) = 0 THEN NULL " _
                                  & "              WHEN CHARINDEX('<BR>', BANKINFO.ClosingText, CHARINDEX('<BR>', BANKINFO.ClosingText, 0) + 4) = 0 THEN NULL " _
                                  & "              ELSE ISNULL(SUBSTRING(BANKINFO.ClosingText " _
                                  & "                                  , CHARINDEX('<BR>', BANKINFO.ClosingText, CHARINDEX('<BR>', BANKINFO.ClosingText, 0) + 4) + 4 " _
                                  & "                                  , CASE " _
                                  & "                                    WHEN CHARINDEX('<BR>', BANKINFO.ClosingText, CHARINDEX('<BR>', BANKINFO.ClosingText, CHARINDEX('<BR>', BANKINFO.ClosingText, 0) + 4) + 4) = 0 THEN NULL " _
                                  & "                                    ELSE CHARINDEX('<BR>', BANKINFO.ClosingText, CHARINDEX('<BR>', BANKINFO.ClosingText, CHARINDEX('<BR>', BANKINFO.ClosingText, 0) + 4) + 4) - (CHARINDEX('<BR>', BANKINFO.ClosingText, CHARINDEX('<BR>', BANKINFO.ClosingText, 0) + 4) + 4) " _
                                  & "                                    END " _
                                  & "                                  ), SUBSTRING(BANKINFO.ClosingText " _
                                  & "                                            , CHARINDEX('<BR>', BANKINFO.ClosingText, CHARINDEX('<BR>', BANKINFO.ClosingText, 0) + 4) + 4 " _
                                  & "                                            , LEN(CAST(BANKINFO.ClosingText AS VARCHAR(2048))) - (CHARINDEX('<BR>', BANKINFO.ClosingText, CHARINDEX('<BR>', BANKINFO.ClosingText, 0) + 3)))) " _
                                  & "              END, '')                                                AS ClosingText3
Avatar billede kjulius Novice
12. september 2006 - 21:45 #1
Har jeg ret i, at koden til ClosingText2 (som du viser her) er længere end koden til ClosingText2, som igen er længere end den til ClosingText1?

Hvis min antagelse er rigtig, så betyder det at du ender med en MONSTER-kode for ClosingText7. Det bliver ikke kønt!

Jeg ville nok (hvis jeg eller kunne, LOL) lave en såkaldt User-defined Function (UDF), som så kan kaldes som enhver anden funktion. Du kunne f.eks. lave den sådan, at den skulle returnere teksten mellem den x'ende og y'ende forekomst af '<BR>'. I sådan en kan man bl.a. eksekvere kode i en sløjfe, hvilket man ikke kan i "normal" SQL. Det er derfor din kode bliver så grim. Man er nødt til at gentage en masse kode, fordi man ikke kan lave en sløjfe. Men det kan man som sagt i en UDF, hvilket gør, at man kan lave en gøre arbejdet én gang, og så senere høste frugten i form af en "ren" SQL. Sådan ala:

SELECT  TxtBetween(BANKINFO.ClosingText, '<BR>', 0, 1) AS ClosingText1, TxtBetween(BANKINFO.ClosingText, '<BR>', 1, 2) AS ClosingText2, ...
Avatar billede janus_007 Nybegynder
14. september 2006 - 12:54 #2
Jeg har kun et råd til dig :-)
Kod det om og overhold designstandarder, istedet for det der rod *S*
Avatar billede janemil Nybegynder
14. september 2006 - 13:08 #3
Nå fik taget mig sammen og lavet det om. Sikke et arbejde, men så er man lidt gladere nu ;-)

Ligger i svar?
Avatar billede kjulius Novice
14. september 2006 - 13:27 #4
Dygtig, dygtig! Og ja, det er dejligt, når man kan se tilbage på veludført arbejde. :-)
Mht. point, så kan jeg ikke med god samvittighed modtage dem. Faktisk synes jeg, at du skal tage dem selv, da det er dig selv, der har udført arbejdet.
Avatar billede janemil Nybegynder
14. september 2006 - 13:32 #5
Takker for sparket.
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