안녕하세요.
이번에 막 시작하는 초보입니다.
너무 기본적인 질문일지도 모르겠지만 막상 검색해도 제가 이해할 만한 답변이 없어서 이렇게 글을 올립니다.
delete from ut_sudang_album where co_name = 'name' and convert(varchar(6), idx_no, 121 ) in ('180611')
이걸로 일괄 삭제를 해야하는데
"exexpression을(를) 데이터 형식 varchar(으)로 변환하는 중 산술 오버플로 오류가 발생하였습니다."
이 메세지가 발생하면서 진행이 되지 않습니다.
idx_no 는 bigint 속성입니다.
어찌 변경해야 삭제가 가능할까요..?
문과 머리라 이해가 너무 어렵습니다...
부디 부탁드립니다.
Comment 3
-
withSQLServer
2018.08.29 12:33
-
플라이어
2018.08.30 08:40
답변 정말 감사합니다 ㅜㅜ
그런데 말씀주신 것처럼 idx_no는 6자리를 훨씬 넘어갑니다..근데 앞에 6자릿수로 각 데이터를 구분이 가능하고
6자릿수 이후의 숫자 데이터를 선택적으로 일괄 삭제해야 하기 때문에 6자릿수로 조건이 들어가야합니다 ㅜㅜ
변경 내용으로는 자릿수 때문에 쿼리가 안되네요...
-
withSQLServer
2018.08.30 12:26
그런 상황은 본문에 없어서 고려하지 않았는데요,
차라리 아래 정보를 알려주시면 쿼리 작성에 도움을 드리겠습니다.
1. 샘플테이블구조
2. 샘플데이터
3. 작성하고자하는 쿼리의 삭제 조건
idx_no 가 180611 일때 CONVERT(VARCHAR(6), idx_no, 121) 로 컨버팅 했을때 문제없습니다만,
idx_no 가 1806112 일때 CONVERT(VARCHAR(6), idx_no, 121) 로 컨버팅 했을때는 6자리를 넘기 때문에 오류가 발생할 수 있습니다.
제 생각에는 idx_no 에 6자리를 넘는 숫자가 존재하는 것으로 보입니다.
변환에 문제가 있어 "exexpression을(를) 데이터 형식 varchar(으)로 변환하는 중 산술 오버플로 오류가 발생하였습니다." 라는 오류를 출력하는 것 같습니다.
idx_no 에 6자리 숫자를 넘어가는 데이터가 있는지 먼저 확인해보시기 바랍니다.
만약 있다면 CONVERT(VARCHAR(19), idx_no, 121) 로 변경해서 사용하시면 됩니다.
참고로, 숫자를 문자열로 바꾸는 경우에는 121을 사용하지 않아도 될것같습니다.
CONVERT 의 3번째 인자는 날짜 변환 스타일을 지정하는 인자라 숫자-> 문자에서는 필요없어보입니다.
CONVERT 에 자세한 사용은 아래 링크에서 참고하시면 됩니다.
https://docs.microsoft.com/ko-kr/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017