2011-09-21 49 views
1

我正在使用Sybase IQ,並需要將字段從字符串轉換爲NUMERIC。該字段有時包含數字以外的字符。在這些情況下,我希望它返回0而不是引發異常。如何做?Sybase IQ:將字符串轉換爲NUMERIC而不會出現錯誤/異常

你可以看看下面的語句來了解更多:

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'); 

只有第2行會工作。其餘3條線會引發例外:

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

相關問題