我的表名是 ip_location_2

解决方案 »

  1.   

    我刚才试了下,主要还是昨天那个思想,在SQL SERVER的查询分析器里执行下面这条语句     UPDATE WLIPTable
    SET    StartIPNum = 
             cast(left(startip,charIndex('.',StartIP)-1) as bigint) * power(2,24) 
        +  cast(left(  right( StartIP , Len(StartIP) - charIndex('.',StartIP) ),
                  charIndex('.', right(StartIP,Len(StartIP)-charIndex('.',StartIP)))-1
               ) as bigint) * power(2,16)
        +  cast(left( right(startip,Len(StartIP)-charIndex('.', StartIP,charIndex('.',StartIP)+1)),charIndex('.',right(startip,Len(StartIP)-charIndex('.', StartIP,charIndex('.',StartIP)+1)))-1)
          as bigint) * 256
        + cast (right(  startIP,LEN(StartIP)-charIndex('.',startIP,charIndex('.',startIP,charIndex( '.',startip)+1)+1 )  ) as bigint)    ,       EndIPNum = 
               cast(left(endip,charIndex('.',endip)-1) as bigint) * power(2,24) 
        +  cast(left(  right( endip , Len(endip) - charIndex('.',endip) ),
                  charIndex('.', right(endip,Len(endip)-charIndex('.',endip)))-1
               ) as bigint) * power(2,16)
        +  cast(left( right(endip,Len(endip)-charIndex('.', endip,charIndex('.',endip)+1)),charIndex('.',right(endip,Len(endip)-charIndex('.', endip,charIndex('.',endip)+1)))-1)
          as bigint) * 256
        + cast (right(endip,LEN(endip)-charIndex('.',endip,charIndex('.',endip,charIndex( '.',endip)+1)+1 )) as bigint)
    历时6秒,影响70004行,很快吧。
      

  2.   

    不要怕麻烦,用到的函数都是很常见很简单的,昨天说过了。所以MySql一定有相应的函数实现,只要替换一下就可以用了。
        刚刚我为了测试还特意建了个70000多条记录的数据库
      

  3.   

    不能直接用sql实现...我要程序..-  -又不麻烦~~
      

  4.   

    用的mySQL数据库吧。
    告诉你3个语法(函数)
    1. insert into Table_A field1,...fieldn select fieldA,...fieldN from Table_B,可以将查询结果加入Table_A中。
    2. update table1 a, table2 b set a.field1= b.field2 where a.field3=b.field4 可以实现关联表的修改。
    3. SUBSTRING_Index, substring_index('123.456.78','.',2)返回"123。456",substring_index('123.456.78','.',-2)返回"456.78",
    最后,varchar字符串"124"是可以直接赋值到int型field上的。临时建几张表存放中间结果,用不着多说了把。