varchar을(를) numeric(으)로 변환하는 중 오류가 발생했습니다. 라고 할때
어떤 데이터에서 발생을 했는지 알 수 있을까요?
아무리 찾아봐도 문제를 발생시킬 데이터가 육안으로는 확인할수도 없고.
ISNUMERIC으로 해도 다 1 로 나오고...
이틀때 이것만 잡고 있는데.. 찾을 수가 없네요.
Comment 4
-
우욱
2014.03.06 11:41
-
김동우(탱소연)
2014.03.06 11:44
아래 예제 데이타는 있는거 같은데 제가 초보라 그런지....
그냥 질문을 보기에는... 해당 컬럼에대한 형식도 있으면 원인파악에 더 도움이 되지않을까 싶네요....
-
처리짱
2014.03.06 15:50
SELECT ISNUMERIC('2,000')
SELECT ISNUMERIC('\2000')SELECT CONVERT(INT, '2,000')
SELECT CONVERT(INT, '\2000')위와같은 경우에는 제대로 안됩니다..
버그인지 의도한 바인지는 모르겠어요..
키워드가 더 있었던거 같은데 잘 모르겠네요;;
-
Hisory
2014.03.06 16:56
Declare @A Table
(
a Varchar(100)
, b Varchar(100)
, c Varchar(100)
, d Varchar(100)
)
Declare @B Table
(
a Varchar(100)
, b Varchar(100)
, c Varchar(100)
, d Varchar(100)
)Insert @A(a,b,c,d)
Values('20130401008','1.00','-8927999.00','2013-04')
,('20130510001','670000000.00','923056.00','2013-07')
,('20130527001','1.00','-3999999.00','2013-06')
,('20130529001','14500000.00','2735000.00','2013-06')
,('20130621001','131000000.00','8070000.00','2013-09')
,('20130625002','1.00','-23999999.00','2013-07')Insert @A(a,b,c,d)
Values('20130401008','1.00','-8927999.00','2013-04')
,('20130510001','670000000.00','923056.00','2013-07')
,('20130527001','1.00','-3999999.00','2013-06')
,('20130529001','14500000.00','2735000.00','2013-06')
,('20130621001','131000000.00','8070000.00','2013-09')
,('20130625002','1.00','-23999999.00','2013-07')Select
sum(isnull( Convert(Decimal(18,2),A.b) ,0) - isnull( Convert(Decimal(18,2),B.b) ,0)) as a
, sum(isnull( Convert(Decimal(18,2),A.c) ,0) - isnull( Convert(Decimal(18,2),B.c) ,0)) as c , A.d
from
(Select * from @A ) as A
left outer join
(Select * from @B ) as B
on A.a = B.a and A.d = B.d
group by A.d정상적으로 동작합니다..
제가 생각나는
방법 1
while 뺑뺑이 돌리면서 try catch로 오류나는 애들 별도로 저장하기
장점: 어쨌든 모든 데이터를 하나하나 점검함
단점: 느릴꺼가 분명함
방법 2
데이터의 전반부 반절만 돌려보고
오류가 안나면 후반부
오류가 나면 그것의 반절
식으로 반씩 대상을 줄여나가기
장점: 백만개라도 20여회면 찾음
단점: 오류있는 놈이 다른 곳 어딘가에 또 많이 있으면 무한 삽질 헬게이트 열림