2017-11-15 2 views
0

이 문자열이 '5666,232343'이고이를 10 진수로 변환하려면 cast('5666,232343' as decimal(7,5))을 사용하지만 NULL 값을 반환합니다. CAST에서 작동하지 않는 이유를 알고 있습니까?이 문자열을 10 진수로 변환하는 방법

+0

5666,232343의 가격은 얼마입니까? – maSTAShuFu

+1

a를 (쉼표)로 바꾸어 보았습니다. (점) – Engin

+0

쉼표를 제거하거나 점으로 쉼표를 바꾸고 다시 시도하십시오 –

답변

0

5666.232343의 값을 저장할 수있는 소수로 캐스트해야합니다.
DECIMAL(7,5)은이 형식의 숫자를 허용합니다 : ##. #####. 당신이 가질 수있는 가장 큰 숫자는 99.99999입니다. 쉼표를 빼고 마침표로 바꿔야합니다.

SELECT CAST('5666.232343' as decimal(16,6)) AS [DecimalValue] 
+0

을 초과 할 것이라는 데이터 유형 문제점이 있습니다.이 숫자에 쉼표 대신이 쉼표를 추가하면 완료되고 최고입니다 – Matt

1

문제는 아마도 쉼표 일 수 있습니다. 일부 데이터베이스에서는 일부 기능이 국제적으로 민감하지는 않습니다. 따라서 시도하십시오 :

cast(replace('5666,232343', ',', '.') as decimal(7, 5)) 
0

Zorkolot이 맞습니다. 현재 사용하고있는 정밀도와 눈금은 제공 한 값으로는 충분하지 않습니다.

당신이 SQL 서버 2012 또는 이상을 사용하고 당신은 당신이 TRY_PARSE 기능을 사용하고 문화을 설정할 수 있습니다, 값에 쉼표를 유지합니다. 문을 완료하지 않고 빨간색 텍스트를 반환하는 대신 오류가 발생하면 NULL을 반환합니다. 또한 원하는 경우 명령문에 기본 오류 처리를 추가하여 실패한 변환이 0 값을 리턴하도록 할 수 있습니다. 예를 들면 :

이 내 오류 처리 수정과 (현재 erroring입니다) 원래 쿼리입니다 :

select coalesce(try_parse('5666,232343' as decimal(7,5) using 'en-GB'),'0') as [DecimalValue] 

이 위와 같은 일이 있지만 그 때문에 소수점 정밀도와 스케일을 개정했습니다 값이 성공적으로 변환됩니다

select coalesce(try_parse('5666,232343' as decimal(16,6) using 'en-GB'),'0') as [DecimalValue] 

이 당신이 수동으로 또는 SQL 함수를 사용하여 교체 수행 할 필요가 없도록해야한다.