T-SQL中,使用Convert、Case and If Function你需要特别注意的“陷阱”
在很多文章中都会涉及到在T-SQL中使用Convert,以及结合Case、If等内置函数完成格式转化的功能。
如下,我将以一个具体的实例来说明这个问题:
1. Sample Table
| 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,结果如下:
| 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
再执行,就成功了。
Impossible = I'm possible
Don't be the same, be better. Just do it.
You'll be there.

浙公网安备 33010602011771号