SQL IsNumeric not working

前端 未结 11 804
迷失自我
迷失自我 2021-01-02 19:47

The reserve column is a varchar, to perform sums on it I want to cast it to a deciaml. But the SQL below gives me an error

select
cast(Reserve as decimal)
fr         


        
11条回答
  •  挽巷
    挽巷 (楼主)
    2021-01-02 20:13

    Gosh, nobody seems to have explained this correctly. SQL is a descriptive language. It does not specify the order of operations.

    The problem that you are (well, were) having is that the where does not do the filtering before the conversion takes place. Order of operations, though, is guaranteed for a case statement. So, the following will work:

    select cast(case when isnumeric(Reserve) = 1 then Reserve end as decimal)
    from MyReserves
    where isnumeric(Reserve ) = 1 and MyReserves is not null
    

    The issue has nothing to do with the particular numeric format you are converting to or with the isnumeric() function. It is simply that the ordering of operations is not guaranteed.

提交回复
热议问题