Sybase IQ: преобразование строки в NUMERIC без ошибок / исключений - PullRequest
1 голос
/ 21 сентября 2011

Я использую 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)

Заранее спасибо!

1 Ответ

2 голосов
/ 02 ноября 2011

Я не уверен, что есть лучший способ, но вы можете попробовать это.

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

Надеюсь, это поможет:)

...