Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用CASE时将数据类型varchar转换为数值时出错_Sql Server_Sql Server 2012 - Fatal编程技术网

Sql server 使用CASE时将数据类型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

原始数据类型是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]
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