2010-07-11 9 views
0
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) 

노드에서 실제 값을 열로 파싱하기 전에이를 어떻게 확인할 수 있습니까? 일반 테이블에 삽입 할 때이 코드는 실제로 필요한 것이 0 일 때 나이에 0을 삽입합니다. 디폴트 값은 int 또는 datetime (삽입 된 1/1/1900)과 같은 비 텍스트 데이터 유형에 삽입됩니다.전에 값을 확인하십시오.

답변

2

는이 작업을 수행하는 내장 함수 NULLIF를 사용할 수 있습니다 : 첫 번째 항은 두 번째 임기를 일치하는 경우

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

, 함수가 NULL을 반환한다. 그렇지 않으면 첫 번째 용어를 반환합니다.

+0

+1 : 대신 COALESCE를 사용합니다. –

+0

COALESCE는 (대략) ISNULL과 같으며 NULLIF가 아닌 –

+0

NULLIF가이 문제를 해결합니다. 이것을 사용하려면 비 텍스트 열마다 비 노드 반환 값 int-0을 알아야합니다. 날짜 시간 - 01/01/1900 나는 결코 NULLIF를 고려하지 않고 순수한 xquery 솔루션에 집중했습니다. 나는 구멍에서 나를 빼앗기 때문에이 수정에 정말 만족합니다! –

관련 문제