T-SQL中,使用Convert、Case and If Function你需要特别注意的“陷阱”

    在很多文章中都会涉及到在T-SQL中使用Convert,以及结合Case、If等内置函数完成格式转化的功能。

    如下,我将以一个具体的实例来说明这个问题:

    1. Sample Table

TestTable
ID(int)  Value(nvachar(50)
1 300.67
2 Test

    2. T-SQL

    select

       (case when isnumeric(Value)<>0

        then convert(float,Value)

        else Value end) As TestConvertValue

    from TestTable

    执行此T-Sql,报错Error converting data type nvarchar to float.

    3. 我们使用同样的Table,只是稍微改动Value,结果如下:

TestTable
ID (int) Value(nvarchar(50)
1 Test
2 Test

     执行此T-Sql,我们会得到同样的错误。

     针对上面这个问题,我们最终找到的问题是:

     使用Case语句时,前后的数据类型不匹配造成的,不管你实际的结果是不是完全满足最终你想要的格式,在Case语句这块必须要满足所有的分支最终返回的DataType要一致。

     我们对上面的T-Sql做修改:

 select

       (case when isnumeric(Value)<>0

        then convert(float,Value)

        else 0 end) As TestConvertValue        -- Value 是 Nvarchar(50) ,用0来取代

    from TestTable

      再执行,就成功了。

posted @ 2016-03-25 11:25  Gavin.King  阅读(356)  评论(0)    收藏  举报