quarta-feira, 3 de agosto de 2011

Função Oracle PL/SQL para testar se uma string representa um número: isNumber ou isNumeric

TAGs: Oracle, SQL, PL/SQL, isNumber, isNumeric

Não existe uma função para testar se o conteúdo de uma string representa um valor numérico, mas existe um workaround.

LENGTH(TRIM(TRANSLATE(string1, ' +-.0123456789', ' ')))

Essa função vai retornar null se o valor for numérico, assim você pode testar com "is null" em uma cláusula where. Por exemplo:

select * from tabela where LENGTH(TRIM(TRANSLATE(campoString, ' +-.0123456789', ' '))) is null

A função translate troca os dígitos por espaços '  '. A função trim remove os espaços. A função length retorna o tamanho da string. Se a string não for numérica, o tamanho será positivo, caso seja numérica, length retornará null.

Fonte: http://www.techonthenet.com/oracle/questions/isnumeric.php