我的数据如下,
Id EmpName Amt
101 AAA 100.0000
102 BBB -
如果Amt是数字,则我需要显示100(不带小数点)或按原样显示。
预期o / p
Id EmpName Amt
101 AAA 100
102 BBB -
我在下面使用过但出现异常,
select id, empname, (CASE WHEN amt NOT LIKE '%[^0-9]%' then amt else left(CONVERT(varchar(50), CAST(ROUND(amt,0) AS money), 1),len(CONVERT(varchar(50), CAST(ROUND(amt,0) AS money), 1)) - 3) end )
as ff,
答案 0 :(得分:0)
您可以使用TRY_CAST
:
SELECT id, empname, ROUND(TRY_CAST(Amt AS DECIMAL(18,4)),0) AS amt
FROM tab
答案 1 :(得分:0)
我会使用try_convert()
:
select id, empname,
(case when try_convert(decimal(18, 0), amt)
then convert(varchar(255), convert(decimal(18, 0), amt))
else amt
end) as ff
. . .
答案 2 :(得分:-1)
尝试一下
Select id, empname, CASE WHEN ISNUMERIC(amt) = 1 AND amt NOT IN ('-','+','$','.',',','\')
THEN CAST(Round(CAST(amt as float),0) as varchar(50))
ELSE amt END as amt
FROM tbl