2017-02-16 118 views
-1

在Oracle我想2串比较如下REGEXP_REPLACE字符串比较

19.12.XX.11 = 19.12.YY.11

我已经与只尝试下面的一个,但它替换第一个字符只有

select REGEXP_REPLACE('19.12.1.11' ,'.', 'x', 4, 4 ) 
    from dual; 
+2

'在这种情况下LIKE'运营商将做的工作就好了。例如:'在哪里ipaddr像'19 .12。%。11'' –

+0

@NicholasKrasnov你评论自己的答案 – saikumarm

回答

0

甲骨文设置

CREATE TABLE ipaddresses (addr1, addr2) AS 
    SELECT '19.12.0.11', '19.12.1.11' FROM DUAL; 

查询

SELECT addr1, 
     addr2, 
     CASE TO_NUMBER(REGEXP_SUBSTR(addr1, '\d+', 1, 1)) 
     WHEN TO_NUMBER(REGEXP_SUBSTR(addr2, '\d+', 1, 1)) 
     THEN 'Match' 
     ELSE 'No Match' 
     END AS Byte1, 
     CASE TO_NUMBER(REGEXP_SUBSTR(addr1, '\d+', 1, 2)) 
     WHEN TO_NUMBER(REGEXP_SUBSTR(addr2, '\d+', 1, 2)) 
     THEN 'Match' 
     ELSE 'No Match' 
     END AS Byte2, 
     CASE TO_NUMBER(REGEXP_SUBSTR(addr1, '\d+', 1, 3)) 
     WHEN TO_NUMBER(REGEXP_SUBSTR(addr2, '\d+', 1, 3)) 
     THEN 'Match' 
     ELSE 'No Match' 
     END AS Byte3, 
     CASE TO_NUMBER(REGEXP_SUBSTR(addr1, '\d+', 1, 4)) 
     WHEN TO_NUMBER(REGEXP_SUBSTR(addr2, '\d+', 1, 4)) 
     THEN 'Match' 
     ELSE 'No Match' 
     END AS Byte4 
FROM ipaddresses; 

输出

ADDR1  ADDR2  BYTE1 BYTE2 BYTE3 BYTE4 
---------- ---------- -------- -------- -------- -------- 
19.12.0.11 19.12.1.11 Match Match No Match Match