SELECT ID,
CASE WHEN ISNUMERIC(COL_VALUE) = 1 THEN CONVERT(NUMERIC, COL_VALUE) * 1000
ELSE COL_VALUE
END AS [COL_VALUE]
FROM Table
原始数据类型为varchar,这就是我将COL_VALUE
转换为numeric
的原因。
ELSE statement
似乎有问题,当我执行不带ELSE statement
的查询时,non-numeric
值将变为NULL
。我检查列是否为数字,如果是数字,则乘以1000,如果不是数字,则返回原始值。很少有非数字值,如:
23`, 34/, 34=4.
答案 0 :(得分:4)
由于您要返回数字和非数字值,因此您应将所有内容转换回varchar
。还可以使用try_cast
函数,因为isnumeric
函数在您的字符串中包含美元符号时有时会返回true,并且convert
函数将失败:
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
答案 1 :(得分:1)
尝试此查询
SELECT ID,
CASE WHEN ISNUMERIC(COL_VALUE) = 1 THEN Convert(varchar(50), CONVERT(NUMERIC, COL_VALUE) * 1000)
ELSE COL_VALUE
END AS [COL_VALUE]
FROM Table