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 に答える