Sql server 使用CASE时将数据类型varchar转换为数值时出错
原始数据类型是varchar,这就是我将Sql server 使用CASE时将数据类型varchar转换为数值时出错,sql-server,sql-server-2012,Sql Server,Sql Server 2012,原始数据类型是varchar,这就是我将列值转换为数值的原因。 ELSE语句似乎有问题,当我在没有ELSE语句的情况下执行查询时,非数字值将变为NULL。我检查列是否为数字,如果是数字,则乘以1000,如果不是数字,则返回原始值。有几个非数值,如: SELECT ID, CASE WHEN ISNUMERIC(COL_VALUE) = 1 THEN CONVERT(NUMERIC, COL_VALUE) * 1000 ELSE COL_VALUE END AS [COL_VALUE] FR
列值
转换为数值
的原因。
ELSE语句
似乎有问题,当我在没有ELSE语句
的情况下执行查询时,非数字
值将变为NULL
。我检查列是否为数字,如果是数字,则乘以1000,如果不是数字,则返回原始值。有几个非数值,如:
SELECT ID,
CASE WHEN ISNUMERIC(COL_VALUE) = 1 THEN CONVERT(NUMERIC, COL_VALUE) * 1000
ELSE COL_VALUE
END AS [COL_VALUE]
FROM Table
因为您返回的是数值和非数值,所以应该将所有内容转换回
varchar
。也可以使用try\u cast
函数,因为isnumeric
函数有时会在字符串中有美元符号时返回true,而convert
函数将失败:
23`, 34/, 34=4.
因为您返回的是数值和非数值,所以应该将所有内容转换回
varchar
。也可以使用try\u cast
函数,因为isnumeric
函数有时会在字符串中有美元符号时返回true,而convert
函数将失败:
23`, 34/, 34=4.
请尝试此查询
SELECT ID,
CASE WHEN TRY_CAST(COL_VALUE AS NUMERIC) IS NOT NULL
THEN CAST(CAST(COL_VALUE AS NUMERIC) * 1000 AS VARCHAR(100))
ELSE COL_VALUE
END AS [COL_VALUE]
FROM Table
请尝试此查询
SELECT ID,
CASE WHEN TRY_CAST(COL_VALUE AS NUMERIC) IS NOT NULL
THEN CAST(CAST(COL_VALUE AS NUMERIC) * 1000 AS VARCHAR(100))
ELSE COL_VALUE
END AS [COL_VALUE]
FROM Table
因此,根据您的
CASE
表达式,如果列的值是数字,您希望返回一个数字数据类型,如果不是数字,则返回另一个数据类型。列必须为单一数据类型案例中的所有路径必须解析为同一类型。如果COL\u VALUE
有可能成为VARCHAR
,您需要让您的第一条路径也返回VARCHAR
,比如,CAST(CONVERT(NUMERIC,COL\u VALUE)*1000)as NVARCHAR)
在2012年,您应该使用TRY\u CONVERT
而不是ISNUMERIC
,根据您的CASE
表达式,如果列的值是数字,则希望返回数字数据类型,如果不是数字,则希望返回另一个数据类型。列必须为单一数据类型案例中的所有路径必须解析为同一类型。如果COL\u VALUE
可能是VARCHAR
,则需要使第一条路径也返回VARCHAR
,例如,CAST(CONVERT(NUMERIC,COL\u VALUE)*1000)as NVARCHAR)
在2012年,您应该使用尝试CONVERT
而不是ISNUMERIC
。