하나의 컬럼에 다중 값이 들어가 있는 경우 0 6 821

by 춘 [Oracle 기초] [2020.08.05 00:13:43]


WITH t AS
(
SELECT '1' val FROM DUAL
UNION ALL
SELECT '1,2' val FROM DUAL
UNION ALL
SELECT '1,2,3' val FROM DUAL
UNION ALL
SELECT '1,2,3,4' val FROM DUAL
UNION ALL
SELECT '2' val FROM DUAL
UNION ALL
SELECT '2,3' val FROM DUAL
UNION ALL
SELECT '2,3,4' val FROM DUAL
UNION ALL
SELECT '3' val FROM DUAL
UNION ALL
SELECT '3,4' val FROM DUAL
UNION ALL
SELECT '4' val FROM DUAL
)
SELECT 
    *
FROM T
;

전체 데이터에서 조회 조건을
'1,2' 로 하게 될 경우

1 또는 2가 포함된 모든 데이터를
출력하려고 합니다.

예를 들어,
결과값은

'1'
'1,2'
'1,2,3'
'1,2,3,4'
'2'
'2,3'
'2,3,4'


여러가지 방법으로 IN 또는 LIKE 를 걸어도 원하는 결과가 나오지 않네요...

질문을 하게 된 계기는 멀티 체크 박스에 다중 체크 후 조회를 하게 될 경우

체크 한 모든 값 중 하나라도 포함 될 때 결과를 받기 위함입니다.

감사합니다.

 

by 마농 [2020.08.05 08:03:37]
WITH t AS
(
SELECT '1' val FROM dual
UNION ALL SELECT '1,2'    FROM dual
UNION ALL SELECT '1,2,3'  FROM dual
UNION ALL SELECT '1,2,3,4'FROM dual
UNION ALL SELECT '2'      FROM dual
UNION ALL SELECT '2,3'    FROM dual
UNION ALL SELECT '2,3,4'  FROM dual
UNION ALL SELECT '3'      FROM dual
UNION ALL SELECT '3,4'    FROM dual
UNION ALL SELECT '4'      FROM dual
UNION ALL SELECT '10'      FROM dual
)
-- 1자리 고정 자리수 라면?
SELECT *
  FROM t
 WHERE REGEXP_LIKE(val, '1|2')
;
-- 가변 자리수 라면?
SELECT *
  FROM t
 WHERE REGEXP_LIKE(','||val||',', ',1,|,2,')
;

 


by 춘 [2020.08.05 23:17:12]

감사합니다.

마농님의 퀴즈나 여러 답변을 보며

많이 배우고 있습니다. ^^


by 우리집아찌 [2020.08.05 09:22:17]
WITH t AS
(
SELECT '1' val FROM DUAL
UNION ALL
SELECT '1,2' val FROM DUAL
UNION ALL
SELECT '1,2,3' val FROM DUAL
UNION ALL
SELECT '1,2,3,4' val FROM DUAL
UNION ALL
SELECT '2' val FROM DUAL
UNION ALL
SELECT '2,3' val FROM DUAL
UNION ALL
SELECT '2,3,4' val FROM DUAL
UNION ALL
SELECT '3' val FROM DUAL
UNION ALL
SELECT '3,4' val FROM DUAL
UNION ALL
SELECT '4' val FROM DUAL
)

SELECT VAL
 FROM T
WHERE LENGTH(VAL) - NVL(LENGTH(REPLACE(REPLACE(VAL,'1',''),'2','')),0) > 0

--------------------------------------------------------------------------

SELECT *
 FROM T
WHERE LENGTH(VAL) - NVL(LENGTH(REGEXP_REPLACE(VAL,'1|2','')),0) > 0 

;

 


by 춘 [2020.08.05 23:17:36]

감사합니다.

우리집 아찌님의 여러 답변을 보며

많이 배우고 있습니다. ^^


by 한번사는인생 [2020.08.05 09:25:08]

비트연산하는게 가장 좋은 방법인거 같네요.ㅜ.ㅜ


by 춘 [2020.08.05 23:18:17]

답변 감사합니다.

비트 연산 처리는 제 실력이 미천하여,

더욱 어렵게 느껴지네요 ^^

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