sábado, 24 de setembro de 2011

SQL Server: ISNUMERIC retorna falso positivos

Esse post não será mais atualizado nesse blog. Para visualizar esse post em seu novo endereço, acesse:
http://milaneze.com.br/post/2011/09/23/SQL-Server-ISNUMERIC-retorna-falso-positivos.aspx


A função ISNUMERIC retorna alguns falsos positivos em determinadas situações. Alguns dos casos são: para sinais de "$" (cifrão), "-" (menos), espaço e tab.

Uma maneira de evitar isso é adicionar "e0" ao final do dado que será testado. Isso fará o número ficar num formato científico, o que na prática multiplica o número por 1. Caso seja algum dos sinais citados acima, a função ISNUMERIC irá retornar 0, pois não é um número (por exemplo: "$e0").

Caso o número a ser testado já esteja num formato científico, ISNUMERIC retornará 0, pois, por exemplo "1.234e4e0" não é um valor numérico válido. Para lidar com isso, antes de adicionar "e0" ao número a ser testado, pode ser interessante testar antes para ver se o número contém a letra "E" nele. Caso contenha, basta colocar esse valor na função ISNUMERIC para fazer o teste. Caso contrário, então deverá ser adicionado "e0" após o valor.

Nenhum comentário: