• Thanks for the good discussion. For the record, I agree with Hugo -- ISNUMERIC doesn't give you very good information because it's test is overly broad.

    For example,

    \- ,,.,

    succeeds in ISNUMERIC() because that converts to a MONEY value of 0.

    If you want to see some of the other odd things that are considered numeric by this function, try this:

    declare @limit int

    set @limit = 4

    ;with l as (

    select 32 as i, char(32) as s, isnumeric(char(32)) as n

    union all

    select i+1, char(i+1), isnumeric(char(i+1)) from l where i < 127

    ),

    m as (

    select cast(l.s as varchar(max)) as ms, isnumeric(l.s) as mn

    from l

    where ISNUMERIC(l.s) = 1

    union all

    select ms + cast(l.s as varchar(max)), ISNUMERIC(ms + cast(l.s as varchar(max)))

    from m,l

    where mn = 1

    and datalength(ms) < @limit

    and ms not like '%[0-9]%')

    select ms from m

    where mn = 1 and ms not like '%[0-9]'

    option (maxrecursion 0)

    This will return all of the strings with length of @limit or below which pass ISNUMERIC() even though they don't contain any digits.