Why does ISNUMERIC('.') return 1?

后端 未结 3 437
逝去的感伤
逝去的感伤 2020-11-28 14:35

Recently I was working with ISNUMERIC in SQL Server, when I encountered a problem, which led to finding this snippet of code.

SELECT ISNUMERIC(\'.\')
         


        
3条回答
  •  余生分开走
    2020-11-28 15:07

    See IsNumeric() Broken? Only up to a point.

    SELECT CAST('.' AS MONEY) 
    

    returns 0.00 (though the cast fails for int and float)

    ISNUMERIC just checks that the value can be cast to any one of the numeric datatypes which is generally useless. Usually you want to know whether it can be cast to a specific type.

    Additionally it doesn't even seem to do that task correctly for all possible inputs.. ISNUMERIC(' ') returns 0 despite casting successfully to both int and money. Conversely ISNUMERIC(N'8') returns 1 but does not cast successfully to anything that I tried.

    Some useful helper functions for that are here IsNumeric, IsInt, IsNumber.

    SQL Server 2012 introduced TRY_PARSE and TRY_CONVERT that help with this greatly.

提交回复
热议问题