如有表A字段   ip1          ip2 
  192.168.1.1 192.168.1.1 
  192.168.1.1 192.168.1.2
  192.168.1.3,192.168.1.22  192.168.1.3  想查询得到这样的结果
  ip1          ip2                           if_ip_changge
  192.168.1.1 192.168.1.1                         No
  192.168.1.1 192.168.1.2                         Yes    
  192.168.1.3,192.168.1.22  192.168.1.3          No
 
  ip1是初始ip  ip2是最后修改的ip  如果有改变则为yes  没有改变则为No     再多个ip中 最后修改的ip  与初始ip有一个相同  为No 

解决方案 »

  1.   


    WITH t AS (
    SELECT '192.168.1.1' ip1,'192.168.1.1' ip2 FROM DUAL UNION ALL
    SELECT '192.168.1.1' ip1,'192.168.1.2' ip2 FROM DUAL UNION ALL
    SELECT '192.168.1.3' ip1,'192.168.1.22  192.168.1.3' ip2 FROM DUAL
    )
    SELECT t.*,CASE WHEN instr(ip2,ip1) = 0 THEN 'yes' ELSE 'no' END FROM t
      

  2.   

    楼上的前辈 如果 如果ip1有两个ip地址 用逗号隔开的 这条语句就不行了
      

  3.   

    SELECT t.*,CASE WHEN instr(ip1,ip2) = 0 THEN 'yes' ELSE 'no' END FROM t
    你的需求应该是ip2 只能有一个ip地址吧
      

  4.   

    嗯 对的  要拿ip2跟 ip1去比较   ip1可能有多个ip地址 ,符号隔开的
      

  5.   

    http://topic.csdn.net/u/20110622/15/5704f8b2-615a-407f-9d84-3d00e3fe0d68.html
      

  6.   

    嗯 对的 要拿ip2跟 ip1去比较 ip1可能有多个ip地址 ,符号隔开的--------判断IP2是否存在IP1
    SQL> WITH t AS (
      2  SELECT '192.168.1.1' ip1,'192.168.1.1' ip2 FROM DUAL UNION ALL
      3  SELECT '192.168.1.1' ip1,'192.168.1.2' ip2 FROM DUAL UNION ALL
      4  SELECT '192.168.1.3' ip1,'192.168.1.22  192.168.1.3' ip2 FROM DUAL
      5  )
      6  select ip1,
      7         ip2,
      8         case when instr(ip1, ip2) > 0 then 'NO'
      9         else 'YES' END CASE
     10    from t
     11  /IP1         IP2                       CASE
    ----------- ------------------------- ----
    192.168.1.1 192.168.1.1               NO
    192.168.1.1 192.168.1.2               YES
    192.168.1.3 192.168.1.22  192.168.1.3 YESSQL> 
      

  7.   

    前辈   第三条记录 ip2的ip有与ip1匹配的 所以 应该是N0
      

  8.   

    case when instr(ip1, ip2) > 0 then 'YEA' else 'NO' end
      

  9.   


    为什么都不看 ,这个符号的。  case when instr(ip1, ip2) > 0 then 'YEA' else 'NO' end 这条语句   第三条记录是不行的   因为第三条 是No
      

  10.   

    SQL> 
    SQL> WITH t AS
      2   (SELECT '192.168.1.1' ip1, '192.168.1.1' ip2 FROM DUAL
      3    UNION ALL
      4    SELECT '192.168.1.1' ip1, '192.168.1.2' ip2 FROM DUAL
      5    UNION ALL
      6    SELECT '192.168.1.3,192.168.1.22' ip1, '192.168.1.3' ip2 FROM DUAL)
      7  SELECT t.*,
      8      CASE WHEN instr(ip1, ip2) > 0 THEN
      9            'no'
     10           ELSE
     11            'yes'
     12         END
     13    FROM t;
     
    IP1                      IP2         CASEWHENINSTR(IP1,IP2)>0THEN'N
    ------------------------ ----------- ------------------------------
    192.168.1.1              192.168.1.1 no
    192.168.1.1              192.168.1.2 yes
    192.168.1.3,192.168.1.22 192.168.1.3 no
     
    SQL> 
      

  11.   

    楼上的前辈 如果数据是这样  92.168.1.1 与 192.168.1.1  也是没有变化的  
    好苦恼
    第三条记录    
    192.168.1.1               192.168.1.1 no
    192.168.1.1               192.168.1.2 yes
    192.168.1.1,192.168.1.22  92.168.1.1 no
      

  12.   

    instr 这个函数好像不能解决问题
      

  13.   

    SQL> --instr思路是对的,只要ip2只有一个值
    SQL> WITH t AS
      2   (SELECT '192.168.1.1' ip1, '192.168.1.1' ip2 FROM DUAL UNION ALL
      3    SELECT '192.168.1.1' ip1, '192.168.1.2' ip2 FROM DUAL UNION ALL
      4    SELECT '192.168.1.3,192.168.1.22' ip1, '192.168.1.3' ip2 FROM DUAL UNION ALL
      5    SELECT '192.168.1.1,192.168.1.22' ip1, '92.168.1.1' ip2 FROM DUAL
      6    )
      7  SELECT t.*,
      8      CASE WHEN instr(','||ip1||',', ','||ip2||',') > 0 THEN
      9            'no'
     10           ELSE
     11            'yes'
     12         END if_ip_change
     13    FROM t;
     
    IP1                      IP2         IF_IP_CHANGE
    ------------------------ ----------- ------------
    192.168.1.1              192.168.1.1 no
    192.168.1.1              192.168.1.2 yes
    192.168.1.3,192.168.1.22 192.168.1.3 no
    192.168.1.1,192.168.1.22 92.168.1.1  yes
     
    SQL> 
      

  14.   

    这样就可以了SELECT t.*,CASE WHEN instr(',' || ip1 || ',', ',' || ip2  || ',') = 0 THEN 'yes' ELSE 'no' END FROM t
      

  15.   

    select IP1,IP2, CASE WHEN 
    (SUBSTR(IP2,1,LENGTH(IP1))=IP1 AND SUBSTR(IP2,LENGTH(IP1)+1,1)=',') 
    OR (SUBSTR(IP2,-LENGTH(IP1))=IP1 AND SUBSTR(IP2,-(LENGTH(IP1)+1),1)=',')
    OR INSTR(IP2,','||IP1||',')>0 
    THEN 'NO' ELSE 'YES' END
    from dd
      

  16.   

    IP1是只有1个IP的,IP2是有多个IP的