2009-02-20 55 views
3

檢測從XML數據的字符串我在SQL Server數據庫的非類型化XML列持有這種價值觀如何在XQuery中

1 
<root><a>123</a></root> 
<root>23d</root> 
23 

我用下面的查詢

declare @x xml 
set @x='1' 
select @x.exist('xs:int(.)') 

嘗試但這裏問題是存在函數將返回1即使@x='<root><a>12</a></root>'

我想在這種情況下輸出爲'0'。

有沒有出路?

回答

3

如果XQuery表達式計算爲非空節點列表,則.exist()方法返回1,否則返回0.因此,在您的示例中它每次都會返回1。

如果我正確地理解你,你希望它返回1時,該值只是一個整數,而0當它是XML?

在這種情況下,你需要做到以下幾點:

declare @x xml 
set @x='<root><a>12</a></root>' 
select ISNUMERIC(CAST(@x.query('/') AS nvarchar)) 

這應返回0

declare @x xml 
set @x='12' 
select ISNUMERIC(CAST(@x.query('/') AS nvarchar)) 

這應返回1

+0

哇,那工作..我想錯了方向。 感謝PaddedCell。 – HashName 2009-02-20 11:46:54

+0

是PadddedCell。真棒解決方案。真的幫助我:-) – 2010-01-12 12:12:17

0

什麼內置的XQuery的型式試驗?

. instance of xs:integer 

如果上下文項是整數,會給你一個布爾值true,否則返回false。