MS SQLSERVER 关于XML问题

Fantazindy_yang 2014-05-06 03:22:41
解析一个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
...全文
99 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
先转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)
黄_瓜 2014-05-06
  • 打赏
  • 举报
回复
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)
  • 打赏
  • 举报
回复
直接转字符串类型
Fantazindy_yang 2014-05-06
  • 打赏
  • 举报
回复
上面是举个例子,其他字段是由小数的, 空字符串不能直接转,所以有没有办法在转之前替换成NULL或者0 比如在这个里面加上转换表达式之类的T.C.value('xb[1]','numeric(8,0)') (我试了下不行- - 不知道是不是我写错了还是不支持)
黄_瓜 2014-05-06
  • 打赏
  • 举报
回复
空字符串本来就不能直接转换为numeric 类型的 你的numeric 没有小数位数,可以考虑直接转换为int类型。

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧