mysql 정규식에 대해 질문드립니다.. 0 3 543

by 곡예사 [SQL Query] [2022.03.15 10:25:04]


안녕하세요.
정규식을 써보려고하는데 생각보다 많이 어려운것같습니다 .. 해서 도움을 좀 얻어보려고 하는데요 ..

우선 정규식을 만들기까지 참고한 링크는 첨부했습니다만 제가 정확하게 못만들고 있는지 오류가 나오는 상황입니다.

예를들어 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,}\|?")

블로그와 위키정보를 찾아보면서 위와같이 시도를 해보았으나 정상적으로 작동하지 않아서 고민입니다..
이거 덕분에 잠을 세시간밖에 못자서 그런지 더 눈에 안들어게 되네요 ㅠ_ㅠ

by 마농 [2022.03.15 10:53:19]

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([|]|$)'
;

 


by 곡예사 [2022.03.15 11:22:00]

마농님 정말 진심으로 감사드립니다.

지식이 부족하여 새벽까지 해결하지 못한 기능을 해결할 수 있게되었습니다.

덕분에 편안하게 휴식을 취할 수 있을 것같아서 너무 행복합니다.

저의 이 댓글이 저를 위해 시간을 내어주신 마농님의 찰나의 기분에 조금이라도 기쁨과 보상이 되었으면 하는 바람입니다.

정말 감사합니다!!


by 우주민 [2022.03.15 12:39:11]

와... 정규식이라는 키워드 때문인지 다른 함수 쓰는걸 생각도 못하고 있었네요.

생각이 어떤 틀에 묶여있지 않도록 하는게 힘든거 같습니다.

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