데이터베이스 개발자 질문과 답변 게시판
여러 필드들을 조합을 해서
Card_Num, Card_User
1111 91,11, 30
2222 20,11, 12
3333 12,50,13
이렇게 결과값이 나옵니다.
91, 11, 30 등은 사용자 번호 구요.
11이란 사용자가 접속을 하면 1111, 2222 란 결과값이 나오게 하고 싶습니다.
어떻게 쿼리를 해야 할까요?
Where 11 in ( card_user )
뭐 이런식으로 하면 될까 해서 해봤는데...
varchar 값 '179,0'을(를) 데이터 형식 int(으)로 변환하지 못했습니다.
이런 오류가 발생을 하더라구요.
어떻게 할 수 있을까요?
Comment 6
-
군고구마
2013.10.25 13:52
-
taz2315
2013.10.25 14:01
그렇게 해도 같은 오류가 나옵니다.
-
군고구마
2013.10.25 14:44
아... 지금 보니깐 11,90이런게 문자형이군요...
아래쪽에 하하하하하하님 말대로 하는게 좋은거 같습니다만 꼭 그렇게 해야한다면
다른 방법을 생각해봐야 할 것 같습니다.
-
하하하하하
2013.10.25 14:13
card_user 데이터타입이 varchar고 조건인 11은 int형이라 그렇습니다.
card_user 값중에 ','가 포함된 '179,0' 이 제일 위에 있는것 같은데
말씀하신 대로 여러필드들을 조합해서
1111 '179,0'이 아니라
1111 179
1111 0
이렇게 만들어지게끔 조합하는게 낫지 않을까요?
-
catchv
2013.10.25 14:47
WITH cte AS
(
SELECT '1111' AS Card_Num, '91,11, 30' AS Card_User
UNION ALL SELECT '2222' AS Card_Num, '20,11, 12' AS Card_User
UNION ALL SELECT '3333' AS Card_Num, '12,50,13' AS Card_User
)
SELECT card_num
FROM
(
SELECT card_num, CONVERT(xml, '<r>' + replace(Card_user, ',', '</r><r>') + '</r>') AS xitem
FROM cte
) X
CROSS APPLY X.xitem.nodes('/r') AS Y(item)
WHERE RTRIM(LTRIM(CONVERT(VARCHAR(10), Y.item.query('text()')))) = '11' -
건우아빠
2013.10.25 16:14
성능을 떠나서 이런 방법도 가능할듯.
WITH res AS
(
SELECT '1111' AS Card_Num, '91,11,30' AS Card_User UNION ALL
SELECT '2222' AS Card_Num, '20,11,12' AS Card_User UNION ALL
SELECT '3333' AS Card_Num, '12,50,13' AS Card_User
)select Card_Num
from res
where REPLACE(','+Card_User+',',' ','') like '%,11,%'
지금 봤을때는
where card_user in (11)으로 바뀌어야 하는게 맞는거 같습니다.