Sql ISNUMERIC()

时间:2016-05-12 14:20:24

标签: sql sql-server

SELECT CASE WHEN ISNUMERIC('1a') =1 THEN 1 ELSE 'A' END

我收到此错误!!

  

转换varchar值时转换失败' A'数据类型int。

3 个答案:

答案 0 :(得分:1)

您是数据类型优先的受害者。来自BOL:

  

当运算符组合了两种不同数据类型的表达式时,数据类型优先级的规则指定具有较低优先级的数据类型转换为具有较高优先级的数据类型。如果转换不是受支持的隐式转换,则会返回错误。当两个操作数表达式具有相同的数据类型时,操作的结果具有该数据类型

所以在你的情况下,CASE是一个表达式,当在这个表达式中组合两个或多个数据类型时,它返回最高优先级的数据类型。在你的情况下它是INT ..所以你的查询改为下面

SELECT CASE WHEN ISNUMERIC('1a') =1 THEN cast(1 as varchar) ELSE 'A' END

答案 1 :(得分:0)

SELECT CASE WHEN ISNUMERIC('1a') =1 THEN 1 ELSE 2 END

答案 2 :(得分:0)

SELECT CASE WHEN ISNUMERIC('1A') = 1 THEN '1' ELSE 'A' END

OR

SELECT CASE WHEN ISNUMERIC('1A') =1 THEN '1' ELSE SUBSTRING('1A',2,2) END