Remove leading zeros on Ip address in SQL

I have a column named IP with data like 10.001.99.108

I want to run a script to change it to look like 10.1.99.108

I've used this before:

update TABLE set IP =  substring(IP, patindex('%[^0]%',IP), 10) 

      

but removes leading zeros when begging.

I'm not sure how I can change it to make the second segment.

0


source to share


2 answers


You can do this with the parsename()

and method to remove leading zeros. The following removes leading zeros, discarding the integer, and then back to the string:



select (cast(cast(parsename(ip, 4) as int) as varchar(255)) +
        cast(cast(parsename(ip, 3) as int) as varchar(255)) +
        cast(cast(parsename(ip, 2) as int) as varchar(255)) +
        cast(cast(parsename(ip, 1) as int) as varchar(255))
       )

      

+5


source


try this solution

DECLARE @IpAdress AS TABLE ( IP VARCHAR(100) )
INSERT  @IpAdress
        ( IP )
VALUES  ( '10.001.99.108' ),
        ( '010.001.099.008' ),
        ( '080.081.999.008' );
WITH    Tally
          AS ( SELECT   n = 1
               UNION ALL
               SELECT   n + 1
               FROM     Tally
               WHERE    n <= 100
             ),
        split
          AS ( SELECT   i.IP ,
                        CONVERT(INT, ( CASE WHEN CHARINDEX('.', S.string) > 0
                                            THEN LEFT(S.string,
                                                      CHARINDEX('.', S.string)
                                                      - 1)
                                            ELSE string
                                       END )) AS part
               FROM     @IpAdress AS i
                        INNER JOIN Tally AS T ON SUBSTRING('.' + IP, T.N, 1) = '.'
                                                 AND T.N <= LEN(i.IP)
                        CROSS APPLY ( SELECT    String = ( CASE
                                                              WHEN T.N = 1
                                                              THEN LEFT(i.IP,
                                                              CHARINDEX('.',
                                                              i.IP) - 1)
                                                              ELSE SUBSTRING(i.IP,
                                                              T.N, 1000)
                                                           END )
                                    ) S
             )
    SELECT DISTINCT
            o.ip ,
            SUBSTRING(( SELECT  '.' + CONVERT(VARCHAR, i.part)
                        FROM    split AS i
                        WHERE   i.ip = o.ip
                      FOR
                        XML PATH('')
                      ), 2, 1000) AS newIP
    FROM    split AS o

      



output result

ip                    newIP
010.001.099.008       10.1.99.8
080.081.999.008       80.81.999.8
10.001.99.108         10.1.99.108

      

0


source







All Articles