1

我正在使用 Sybase IQ,需要将字段从字符串转换为 NUMERIC。该字段有时包含数字以外的字符。在这些情况下,我希望它返回 0 而不是引发异常。怎么做?

您可以查看以下陈述以了解更多信息:

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)

提前致谢!

4

1 回答 1

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

希望能帮助到你 :)

于 2011-11-02T13:24:18.087 回答