안녕하세요.
정규식을 써보려고하는데 생각보다 많이 어려운것같습니다 .. 해서 도움을 좀 얻어보려고 하는데요 ..
우선 정규식을 만들기까지 참고한 링크는 첨부했습니다만 제가 정확하게 못만들고 있는지 오류가 나오는 상황입니다.
예를들어 memberNo 라는 필드에
memberNo
-----------
2||3||23||34
-----------
1||33|43||22
-----------
3||50||81||12
이런식으로 데이터가 있다고 가정하였을 때 정확히 3을 가지고 있는지 확인하려고 하는게 목적입니다.
해서 WHERE memberNo REGEXP ("\|?\d{0,}3\d{0,}\|\|\d{0,}3\d{0,}\|?")
블로그와 위키정보를 찾아보면서 위와같이 시도를 해보았으나 정상적으로 작동하지 않아서 고민입니다..
이거 덕분에 잠을 세시간밖에 못자서 그런지 더 눈에 안들어게 되네요 ㅠ_ㅠ
1. FIND_IN_SET : 구분자가 컴마여야 가능
2. INSTR 이나 LIKE 가능 : 앞뒤에 구분자 추가하여 비교 ( |3| 찾기 )
3. 정규식 : (시작 또는 |) (검색어) (종료 또는 |)
WITH t AS ( SELECT '2||3||23||34' memberNo UNION ALL SELECT '1||33|43||22' UNION ALL SELECT '3||50||81||12' ) SELECT memberNo , INSTR(CONCAT('|', memberNo, '|'), CONCAT('|', '3', '|')) flag1 , FIND_IN_SET('3', REPLACE(memberNo, '||', ',')) flag2 , CONCAT('|', memberNo, '|') LIKE CONCAT('%|', '3', '|%') flag3 , memberNo REGEXP '(^|[|])3([|]|$)' flag4 FROM t WHERE 1=1 -- AND FIND_IN_SET('3', REPLACE(memberNo, '||', ',')) > 0 -- AND INSTR(CONCAT('|', memberNo, '|'), CONCAT('|', '3', '|')) > 0 -- AND CONCAT('|', memberNo, '|') LIKE CONCAT('%|', '3', '|%') -- AND memberNo REGEXP '(^|[|])3([|]|$)' ;