Avatar billede michaeljuhl Nybegynder
28. november 2002 - 11:26 Der er 14 kommentarer og
1 løsning

Fjern x antal tegn i udtræk (MSSQL)

? Jeg søger en SQL syntaks der kan fjerne x antal tegn i en streng fra et bestemt tegn, eksempelvis en IP adresse hvor jeg vil fjerne de sidste 3 ell.(2,1) ciffer fra det sidste punktum af.
Funktionerne Left() eller Right() kan ikke bruges, da ip adressen jo ikke altid har det samme antal tegn i strengen.
så ? hvordan skal denne syntaks se ud.
Avatar billede bennytordrup Nybegynder
28. november 2002 - 11:37 #1
declare @ip as nvarchar(20) set @ip = '192.168.1.10'

select    @ip as IP,
        Reverse(Right(Reverse(@ip), Len(@ip) - CharIndex('.', @ip)+1)) as [IP Uden punktum],
        Reverse(Right(Reverse(@ip), Len(@ip) - CharIndex('.', @ip)+2)) as [IP med punktum]
Avatar billede jinxit Nybegynder
28. november 2002 - 11:54 #2
Mere mere simpelt...

Brug funtionen SUBSTRING_INDEX(str,delim,count)

%> SELECT SUBSTRING_INDEX('www.mssql.com', '.', 2);  -> 'www.mssql'
%> SELECT SUBSTRING_INDEX('www.mssql.com', '.', -2);  -> 'mssql.com'
Avatar billede bennytordrup Nybegynder
28. november 2002 - 12:01 #3
Kan den håndtere forskelligt antal forekomster af delim i strengen? Jeg ved godt, at en ip-adresse har tre punktummer, men en web-adresse kan i princippet godt have mere end tre punktummer:

www.fprint.co.uk
Avatar billede bennytordrup Nybegynder
28. november 2002 - 12:02 #4
Bedre link:

www.pegasus.co.uk
Avatar billede jinxit Nybegynder
28. november 2002 - 12:08 #5
Begge links indeholder samme delim '.'

...men nej, så skal du selv "neste" udtrykket
Avatar billede bennytordrup Nybegynder
28. november 2002 - 12:09 #6
OK. Min version klipper fra efter det sidste punktum uanset antallet af punktummer i strengen.
Avatar billede michaeljuhl Nybegynder
28. november 2002 - 12:09 #7
Hej! hvor er i hurtige, jeg skal lige forsøge at passe det ind min tabel, så vender jeg tilbage jer, foreløbig tak
Avatar billede michaeljuhl Nybegynder
28. november 2002 - 12:50 #8
Benny du får point's,
jinxit -> jeg forsøgte at bruge din funktion men kunne ikke umiddelbart anvende den i (MS)SQL.

Med venlig hilsen og tak :-)
Michael Juhl
Avatar billede michaeljuhl Nybegynder
28. november 2002 - 13:09 #9
Hej Benny

Der er lige en mindre fejl i nedenstående syntaks, hvis der er mere end 10 tegn
i IP adressen, kommer tegnet efter det 10 tegn med ud, så hvis du har en kommentar til dette vil jeg blive glad.

SELECT Ping_IP_retur,
    REVERSE(RIGHT(REVERSE(Ping_IP_retur), Len(Ping_IP_retur)
    - CHARINDEX('.', Ping_IP_retur) + 1)) AS [IP Uden punktum],
    REVERSE(RIGHT(REVERSE(Ping_IP_retur), Len(Ping_IP_retur)
    - CHARINDEX('.', Ping_IP_retur) + 2))
    AS [IP med punktum]
FROM Ip_svar
Avatar billede jinxit Nybegynder
28. november 2002 - 13:21 #10
Hvorfor undrer det mig ikke, at et microsoft produkt ikke opfylde SQL92 standarden...
Avatar billede bennytordrup Nybegynder
28. november 2002 - 13:29 #11
SELECT Ping_IP_retur,
    REVERSE(RIGHT(REVERSE(Ping_IP_retur), Len(Ping_IP_retur)
    - CHARINDEX('.', REVERSE(Ping_IP_retur)))) AS [IP Uden punktum],
    REVERSE(RIGHT(REVERSE(Ping_IP_retur), Len(Ping_IP_retur)
    - CHARINDEX('.', REVERSE(Ping_IP_retur)) + 1))
    AS [IP med punktum]
FROM Ip_svar
Avatar billede michaeljuhl Nybegynder
28. november 2002 - 13:50 #12
-> Kanon... Tak skal du have, så virker det bare :-)
Avatar billede michaeljuhl Nybegynder
28. november 2002 - 14:33 #13
Benny er du til flere point -> 100
hvis du kan lave den, så den kun tager de 2 første (xx.xxx) og (xx.xxx.)
jeg skal faktiske bruge denne også.

på forhånd tak.
Avatar billede bennytordrup Nybegynder
28. november 2002 - 14:46 #14
Ud fra mit oprindelige eksempel:

declare @ip as nvarchar(20) set @ip = '192.168.1.100'

select    @ip as IP,
        Reverse(Right(Reverse(@ip), Len(@ip) - CharIndex('.', Reverse(@ip)))) as [IP Uden punktum],
        Reverse(Right(Reverse(@ip), Len(@ip) - CharIndex('.', Reverse(@ip))+1)) as [IP med punktum],

        SubString(@ip, 1, CharIndex('.', @ip, CharIndex('.', @ip)+1)-1) as [Test IP uden punktum],
        SubString(@ip, 1, CharIndex('.', @ip, CharIndex('.', @ip)+1)) as [Test IP med punktum]
Avatar billede michaeljuhl Nybegynder
28. november 2002 - 14:59 #15
Rosene ord -> det virker selv i MSSQL
Jeg takker endnu engang.
Jeg skal lige finde ud af, hvordan jeg giver dig de sidste point's
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