IP不够3位补0,去除小数点
1.例如传入ip为 192.168.0.1 
  转为:192168000001
  传入ip为 192.168.10.0
  转为:192168010000
  若传入:888.888.888.888
  报错误不符合ip地址规则
------------------
写入数据库
test表  假设只有一个字段ip bigint
------写入结果------------
ip  
192168000001
192168010000
  
2.查询数据库中的数据则转为标准ip地址形式
select ip
显示结果为
192.168.0.1
192.168.10.0
请问1和2用存储过程如何写? 
 

解决方案 »

  1.   

    没必要,有统一规范的将IP转换成LONG的方法,LONG字段更短存数据库更合适
      

  2.   

     declare @str varchar(20)='192.168.0.1'
     
     select right('000'+parsename(@str,4),3)+
            right('000'+parsename(@str,3),3)+
            right('000'+parsename(@str,2),3)+
            right('000'+parsename(@str,1),3)
    set @str='192168000001'select rtrim(substring(@str,1,3)*1)+'.'+
           rtrim(substring(@str,4,3)*1)+'.'+
           rtrim(substring(@str,7,3)*1)+'.'+
           rtrim(substring(@str,10,3)*1)
      

  3.   


    CREATE TABLE t1
    (
    ip VARCHAR(20)
    )
    INSERT INTO t1
    SELECT '49.140.255.255' UNION ALL
    SELECT '58.21.0.0'
    SELECT * FROM t1SELECT RIGHT('000'+PARSENAME(ip,4),3)+
    RIGHT('000'+PARSENAME(ip,3),3)+
    RIGHT('000'+PARSENAME(ip,2),3)+
    RIGHT('000'+PARSENAME(ip,1),3)
    FROM t1----------------------
    (无列名)
    049140255255
    058021000000
      

  4.   

    mysql里面有ip函数可以直接转换成数值型,字符串ip和数值直接的互换只需要内置函数即可,lz可以去看看mysql的
    inet_aton:将ip地址转换成数字型
    inet_ntoa:将数字型转换成ip地址