检查之前的价值

时间:2010-07-11 16:36:28

标签: sql sql-server xquery

DECLARE @xVar XML
SET @xVar = 
  '<book genre="security" publicationdate="2002" ISBN="0-7356-1588-2">
   <title>Writing Secure Code</title>
   <author>
      <firstname>Michael</firstname>
      <lastname>Howard</lastname>
      <age>25</age>
      <birthday>2010-05-17T00:00:00</birthday>
   </author>
   <author>
      <firstname></firstname>
      <lastname>LeBlanc</lastname>
      <age></age>
      <birthday></birthday>
   </author>
   <price>39.99</price>
   </book>'

SELECT nref.query('age') AS age
FROM @xVar.nodes('//author') AS authors(nref)

如何在将节点解析为列之前检查节点中的实际值。当插入普通表时,当我真正需要的是null时,这段代码将插入0。为任何非文本数据类型(如int或datetime(插入1/1/1900))插入缺省值。

1 个答案:

答案 0 :(得分:2)

您可以使用内置函数NULLIF执行此操作:

SELECT NULLIF(nref.query('age'), 0) AS age
FROM ...

如果第一个术语与第二个术语匹配,则该函数返回NULL。如果没有,那么它将返回第一个术语。