declare @X XML=
'<Detail>
<Gender>M</Gender>
</Detail>'
我想查询上面这个简单的XML,我想计算性别标签中的值
如果这有价值&#39; M&#39;然后我想以1 的形式取回结果
否则,如果这有价值&#39; F&#39;然后我想把结果取回2
其他返回0
我们可以使用以下查询轻松完成此操作,将性别值返回为M
SELECT
@X.value('(Detail/Gender)[1]', 'varchar') as Gender
然后存储在局部变量中,然后使用条件语句,我们必须计算相应的返回值。
从XML本身获取时有没有办法做到这一点?
我的意思是在从@x本身选择性别时,我们必须使用条件语句来返回最终值(即1或2或3)
这也有助于删除本地变量/查询成本,这可以在单个Fetch本身中完成
以下将是我需要的结果,必须从单个查询中获取
Gender
1
答案 0 :(得分:1)
尝试类似
的内容SELECT
CASE WHEN @X.value('(Detail/Gender)[1]', 'varchar(max)')='M' THEN 1 ELSE 2 END as Gender
或者使用目录表并将键(M,F,?...)连接到任何映射值。
DECLARE @xml XML=
N'<Detail>
<Gender>M</Gender>
<Gender>F</Gender>
<Gender>oops</Gender>
</Detail>';
DECLARE @mockup TABLE(Code VARCHAR(1),Value VARCHAR(10));
INSERT INTO @mockup VALUES('M',1),('F',2);
SELECT m.Value
FROM @xml.nodes(N'/Detail/Gender') AS A(g)
LEFT JOIN @mockup AS m ON m.Code=g.value(N'text()[1]','nvarchar(max)');