• [font="Verdana"]Here's some example code to give you an idea:

    declare @IPAddress table(AddressID int not null primary key, IPAddress varchar(15) not null);

    insert into @IPAddress

    select 101, '8.143.46.' union all

    select 102, '8.243.6.AC' union all

    select 103, '192.168.1.1' union all

    select 104, '192.BC.168.1.1' union all

    select 105, '192.212.456.21' union all

    select 106, '1.2.3.4.5.6'

    ;

    with

    MarkedAddress as (

    selectAddressID,

    IPAddress,

    0 as Marker0,

    charindex('.', IPAddress, 1) as Marker1,

    charindex('.', IPAddress, charindex('.', IPAddress, 1) + 1) as Marker2,

    charindex('.', IPAddress, charindex('.', IPAddress, charindex('.', IPAddress, 1) + 1) + 1) as Marker3,

    len(IPAddress) + 1 as Marker4

    from@IPAddress

    ),

    PartionedAddress as (

    selectAddressID,

    IPAddress,

    substring(IPAddress, Marker0 + 1, Marker1 - Marker0 - 1) as Part1,

    substring(IPAddress, Marker1 + 1, Marker2 - Marker1 - 1) as Part2,

    substring(IPAddress, Marker2 + 1, Marker3 - Marker2 - 1) as Part3,

    substring(IPAddress, Marker3 + 1, Marker4 - Marker3 - 1) as Part4

    fromMarkedAddress

    )

    select*,

    case

    when IPAddress like '%[^0-9.]%' then 0

    when IPAddress like '%.%.%.%.%' then 0

    when IPAddress not like '[0-9]%.[0-9]%.[0-9]%.[0-9]%' then 0

    when cast(Part1 as bigint) > 255 then 0

    when cast(Part2 as bigint) > 255 then 0

    when cast(Part3 as bigint) > 255 then 0

    when cast(Part4 as bigint) > 255 then 0

    else 1

    end as IsAddressValid

    fromPartionedAddress

    ;

    Edited because it didn't need the check for length zero parts as the parttern check will pick up those, and it needed an additional check if there's too many full stops in the pattern.

    [/font]