2011-09-21 7 views
1

Sybase IQ를 사용 중이며 문자열을 숫자로 변환해야합니다. 필드에는 때로는 숫자가 아닌 문자가 있습니다. 이러한 경우 예외를 발생시키는 대신 0을 반환하기를 원합니다. 그렇게하는 방법?Sybase IQ : 오류/예외없이 문자열을 숫자로 변환

아래 더 이해하기 위해 문을 볼 수 있습니다

SELECT CONVERT(NUMERIC(10, 0), ''); 
SELECT CONVERT(NUMERIC(10, 0), '1'); 
SELECT CONVERT(NUMERIC(10, 0), 'a'); 
SELECT CONVERT(NUMERIC(10, 0), 'a1'); 
SELECT CONVERT(NUMERIC(10, 0), '1a'); 

첫 번째 두 라인이 작동합니다. 나머지 세 줄은 예외를 발생시킵니다 :

Cannot covert a to a NUMERIC(10, 0)(07006,-157) 

미리 감사드립니다!

답변

2

더 좋은 방법이 있는지 잘 모르겠지만 시도해 볼 수 있습니다.

SELECT CASE PATINDEX('%[a-zA-Z]%','') 
    WHEN 0 THEN CONVERT(NUMERIC(10,0), '') 
    ELSE 0 END 
SELECT CASE PATINDEX('%[a-zA-Z]%','1') 
    WHEN 0 THEN CONVERT(NUMERIC(10, 0), '1') 
    ELSE 0 END 
SELECT CASE PATINDEX('%[a-zA-Z]%','a') 
    WHEN 0 THEN CONVERT(NUMERIC(10, 0), 'a') 
    ELSE 0 END 
SELECT CASE PATINDEX('%[a-zA-Z]%','1a') 
    WHEN 0 THEN CONVERT(NUMERIC(10, 0), '1a') 
    ELSE 0 END 
SELECT CASE PATINDEX('%[a-zA-Z]%','a1') 
    WHEN 0 THEN CONVERT(NUMERIC(10, 0), 'a1') 
    ELSE 0 END 

은 도움이 :)

+0

+1 감사 케빈를 바랍니다. 성능과 안도감을 높이기 위해 클라이언트 측에서 사용할 수있는 데이터를 얻고 전환을 결정했습니다. – Viet

+0

더 좋은 방법이 없다는 것은 너무 나쁘지만이 일은해야 할 것입니다. – stu

관련 문제