如何为 sql 中的 NULL/空值列生成带有打开和关闭标记的 XML?

Posted

技术标签:

【中文标题】如何为 sql 中的 NULL/空值列生成带有打开和关闭标记的 XML?【英文标题】:How to generate XML with open and close tag for NULL/empty value columns in sql? 【发布时间】:2019-04-29 04:40:01 【问题描述】:

我正在使用 SQL XML。我想为 sql 中的 NULL/空值列生成带有打开和关闭标记的 XML。请查找下表和查询:

表格:

雇员:

+-------+---------+
| empid | empname |
+-------+---------+
|     1 | Arul    |
|     2 | Ram     |
|     3 | Nivi    |
+-------+---------+

工作细节:

+-------+------------+----------------+
| empid | empaddress |    empemail    |
+-------+------------+----------------+
|     1 | Chennai    | mail1@mail.com |
|     2 | Madurai    | mail2@mail.com |
|     3 | Mumbai     | NULL           |
+-------+------------+----------------+

Sql查询:

select A.empid,A.empname,
(select B.empaddress,isnull(B.empemail,'') as empemail from empdetail B where A.empid=B.empid  for xml path('EmployeeDetails'),type) 
from emp A 
where A.empid=1 for xml path('root')

此查询提供如下预期数据:

<root>
  <empid>1</empid>
  <empname>Arul</empname>
  <EmployeeDetails>
    <empaddress>Chennai</empaddress>
    <empemail>mail1@mail.com</empemail>
  </EmployeeDetails>
</root>

但是这个查询给出了这个标签 &lt;empemail /&gt; 当我移动到 empid 3 时:

<root>
  <empid>3</empid>
  <empname>Nivi</empname>
  <EmployeeDetails>
    <empaddress>Mumbai</empaddress>
    <empemail />
  </EmployeeDetails>
</root>

但我想要打开和关闭标签,即使列值为 NULL。如下:

<root>
  <empid>3</empid>
  <empname>Nivi</empname>
  <EmployeeDetails>
    <empaddress>Mumbai</empaddress>
    <empemail></empemail>
  </EmployeeDetails>
</root>

【问题讨论】:

根据 Xml 规范,右尖括号中的标记名是可选的。所以不应该有任何理由改变你的代码。网络库没有给出您要求的结果。我会保持原样。 【参考方案1】:

&lt;empemail /&gt; 是表示空字段的标准方式。

您可以将值替换为空格或其他值:

select e.empid, e.empname,
       (select ed.empaddress, coalesce(ed.empemail, ' ') as empemail
         from empdetail ed
         where e.empid = ed.empid
         for xml path('EmployeeDetails'), type
        ) 
from emp e
where e.empid = 3
for xml path('root')

Here 是一个 dbfiddle。

【讨论】:

兄弟,它的工作。所以,我需要给单个空间而不是空白空间。谢谢,兄弟。

以上是关于如何为 sql 中的 NULL/空值列生成带有打开和关闭标记的 XML?的主要内容,如果未能解决你的问题,请参考以下文章

如何为oracle中的特定输入选择不包含空值的列名?

isnull函数

数据库中的空值与NULL的区别以及python中的NaN和None

如何为第一个表的空白或空值应用左连接?

数据库中的空值与NULL的区别以及python中的NaN和None

Apache Spark:如何使用 Java 在 dataFrame 中的空值列中插入数据