정규표현식으로 문자+숫자 를 범위 검색하고 싶습니다. 0 3 1,611

by chrome [2016.10.20 16:54:11]


 

VARCHAR2(10) 타입의 컬럼에서 데이터가 'JH10' 부터 'JH42' 까지 포함하는 로우를 검색하고 싶습니다. 

 

데이터 내부적으론 JH100000 부터 JH429999 를 검색하는 조건이지요

between 으로 하면 되긴 하지만, 좀 더 다양한 응용을 위해 정규표현식으로 검색하고 싶습니다.

10부터 42라는 조건이 의외로 어려워 낑낑거리고 있내요 

 

 

by Kyle [2016.10.20 17:17:25]

굳이 쓴다면 이정도 되겠지만 별로 좋아 보이지는 않네요...ㅠ.ㅠ

 

WITH T(CODE) AS (
    SELECT 'JH000000' FROM DUAL UNION ALL 
    SELECT 'JH100000' FROM DUAL UNION ALL 
    SELECT 'JH280000' FROM DUAL UNION ALL 
    SELECT 'JH330000' FROM DUAL UNION ALL 
    SELECT 'JH400000' FROM DUAL UNION ALL 
    SELECT 'JH420000' FROM DUAL UNION ALL 
    SELECT 'JH440000' FROM DUAL UNION ALL 
    SELECT 'JH510000' FROM DUAL UNION ALL 
    SELECT 'JH670000' FROM DUAL UNION ALL 
    SELECT 'JH760000' FROM DUAL  
)
SELECT *
FROM T
WHERE REGEXP_LIKE(CODE, 'JH[1-3]{1}[0-9]{1}+')
    OR REGEXP_LIKE(CODE, 'JH[4]{1}[0-2]{1}+')

 


by chrome [2016.10.20 17:20:34]

 

뭔가 흐 고맙습니다. 애매하긴 하지만 이런 방법이 있군요+.+

 


by 마농 [2016.10.20 17:52:03]

억지 상황을 만들어 억지 코드를 짜는 것 보다는
실제 상황에 필요한 간결한 코드를 짜는게 좋을 듯 합니다.
Between 으로 가능한걸 굳이 정규식으로 할 필요성이 느껴지질 않네요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입