当我有
时case
when p.okres_nazev like '%Praha%'
then cast(isnull(RealEstateTax_Suma,0) / 7 / 2 as varchar (30)) +' m2'
它给了我错误
Conversion failed when converting the varchar value '0.00 m2' to data type int.
我想要结果+ m2。所以像30平方米
更新: 查询看起来像
SELECT a.custkey,
a.dt,
a.RealEstateTax_Suma,
a.RealEstateTax_pocet,
p.psc,
CASE
WHEN p.okres_nazev LIKE 'Praha'
THEN CAST(isnull(RealEstateTax_Suma, 0) / 7 / 2 AS VARCHAR (30)) + ' m2'
ELSE 0
END AS VelikostNemovitosti
FROM wspace.dbo.DP_CustPayments_v3 a
JOIN dmr.Cust c
ON a.custKey = c.CustKey
AND c.LastRecFlg = 1
LEFT JOIN wspace.dbo.tp_GEO p
ON c.PostZIPCode = p.psc
答案 0 :(得分:2)
问题在于else 0
。将其更改为else '0 m2'
,它应该可以正常工作。
问题是,case
的结果总是必须是同一类型。 0
子句中的else
是一个整数,因此它会尝试将另一种情况下的varchar
转换为int
,但这不起作用。
但是,你不应该在数据库中这样做。添加m2
和处理null
值应该在表示层中完成,而不是在SQL中完成。
另外,like
不起作用 - 你需要使用例如like 'Praha%'
,否则你只是在做= 'Praha'
。