20230227 - SQL : REGEXP_LIKE 과 TABLE(APEX_STRING.SPLIT('부산|광주|충청||', '|')

조회 조건에 주소1, 주소2 ... 주소5가 있는 상황에 각 주소를 입력하게되면 OR 조건으로 해당 데이터를 가져올 수 있도록 SQL 구현.


처음에는 Oracle Text의 contains 를 활용하여 구현하였으나 한글에 대한 것은 지원이 잘 안 되는 부분들이 확인되어 정규 표현식으로 대체 구현하게 됨.

데이터가 분명히 존재함에도 '충청북도', '충청남도'로는 조회되지 않음


AS-IS


   and (decode(nvl2(:P302_ADDR1,1,0)+nvl2(:P302_ADDR2,1,0)+nvl2(:P302_ADDR3,1,0)+nvl2(:P302_ADDR4,1,0)+nvl2(:P302_ADDR5,1,0), 0, '%') = '%'
        or contains(pomst.cust_addr, '%'||:P302_ADDR1||'%|%'||:P302_ADDR2||'%|%'||:P302_ADDR3||'%|%'||:P302_ADDR4||'%|%'||:P302_ADDR5||'%') > 0)


TO-BE

 
   and REGEXP_LIKE(pomst.cust_addr, nvl((select listagg(column_value, '|') from table(apex_string.split('부산|광주|충청||', '|')
                                                                                     )
                                        ), '|')
                  )



댓글 없음:

댓글 쓰기

20250202 - IG 다운로드 버튼 바로 보이기

JS initialization Code : function (config) {     var $ = apex.jQuery,         toolbarData = $.apex.interactiveGrid.copyDefaultToolbar(),  ...