[MSSQL]文字ip轉為數值的ip

有關資料庫的討論, 都可以在這發表哦~~
回覆文章
頭像
tim
文章: 1380
註冊時間: 2008年 11月 26日, 00:49

[MSSQL]文字ip轉為數值的ip

文章 tim »

在一般程式中要寫個轉換 ip 為數值的程式蠻容易的, 但在 sql server 中做, 就得花些工夫, 以下為範例,

代碼: 選擇全部

    declare @ip varchar(15) 
    declare @v numeric 
    declare @i smallint, @pos smallint, @pold smallint 
    select @ip = '192.168.1.1' 
     
    select @i=3 
    select @pold = 1 
    select @v = 0 
    while(@i >= 0) 
    begin 
      select @pos = charindex('.', @ip, @pold) 
      if(@pos>0) 
      begin 
        select @v = @v + convert(numeric, power(256,@i)) * convert(int, substring(@ip, @pold, @pos-@pold)) 
        select @pold = @pos + 1 
      end 
      else 
      begin 
        select @v = @v +  convert(int, substring(@ip, @pold, 5)) 
      end 
      select @i = @i - 1 
          
    end 
     
    print @v 

算出來 '192.168.1.1' => 3232235777 就對囉, 計算方式為
192 * 256 ^ 3 + 168 * 256 ^ 2 +1 * 256 + 1 = 3232235777
多多留言, 整理文章, 把經驗累積下來.....
回覆文章