varchar 열에서 숫자 필드를 추출해야하는 쿼리가 있습니다. 일부 문을 대체하고 하위 문을 select 문을 및 bigint 다 잘 작동하지만 캐스팅 할 때이 동일한 캐스트를 사용할 때 오류가 발생합니다 'bigint 데이터 형식 varchar 변환 오류'. 어떻게 가능합니까?캐스팅 오류
select CAST(
case when CHARINDEX('/',f.BML,1)>0
then substring(replace(replace(replace(replace(replace(replace(replace(replace(replace(f.BML,'A',''),'B',''),'C',''),'+',''),',',''),'S',''),'H',''),'P',''),'¸','') ,1,CHARINDEX('/',BML,1)-1)
else replace(replace(replace(replace(replace(replace(replace(replace(replace(f.BML,'A',''),'B',''),'C',''),'+',''),',',''),'S',''),'H',''),'P',''),'¸','')
end as bigint)
from TableN n join TableO o on
n.Id=o.Id
join TableF f on
f.OId=o.OId and
substring(cast(n.RJ as varchar(10)),1,3)=substring(CAST(f.MT AS varchar(10)),1,3) and
CAST(
case when CHARINDEX('/',f.BML,1)>0 then substring(replace(replace(replace(replace(replace(replace(replace(replace(replace(f.BML,'A',''),'B',''),'C',''),'+',''),',',''),'S',''),'H',''),'P',''),'¸','') ,1,CHARINDEX('/',f.BML,1)-1)
else replace(replace(replace(replace(replace(replace(replace(replace(replace(f.BML,'A',''),'B',''),'C',''),'+',''),',',''),'S',''),'H',''),'P',''),'¸','')
end as bigint) =n.mbr
order by n.Ident
'bigint'로 변환 할 수없는'varchar' 열에 값이 있다고 생각합니다. –
@Mikael Eriksson하지만 어떻게 똑같은 캐스트가 select 문에서 통과 할 수 있습니까? 동일한 예외가 발생합니다. – Marka
오류를 일으키는 행을 필터링하는 where 절이 있습니까? – Fred