MS SQLSERVER 关于XML问题
解析一个XML语句
select T.C.value('xm[1]','varchar(20)') as xm,
T.C.value('xb[1]','numeric(8,0)')as xb
from @lxml_str.nodes('//rtcffx') as T(C)
发现如果xb元素没有值, 如:
<xm>张三</xm>
<xb></xb>
则会报错:从数据类型 nvarchar 转换为 numeric 时出错。
因为这里执行的是隐式convert(numeric(8,0),''),所以会报错,
请问有没有好的解决办法,比如如果是''就转换为null
------解决方案--------------------空字符串本来就不能直接转换为numeric 类型的
你的numeric 没有小数位数,可以考虑直接转换为int类型。
------解决方案--------------------SELECT T.C.value('xm[1]', 'varchar(20)') AS xm,
CAST((T.C.value('
(xb/text())[1]', 'NUMERIC(8, 0)')) AS numeric(8,2)) AS xb
FROM @lxml_str.nodes('//rtcffx') AS T (C)
------解决方案--------------------先转varchar 再转numeric
select T.C.value('xm[1]','varchar(20)') as xm,
CAST (case when T.C.value('xb[1]','varchar(20)')='' then 0
else T.C.value('xb[1]','varchar(20)') end as numeric(8,0))as xb
from @lxml_str.nodes('//rtcffx') as T(C)