質問

私は、このような

などの値を保持しているSQL Serverのデータベースの型指定されていないXML列を持っています
 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」に出力したいと思います。

アウト方法はありますか?

役に立ちましたか?

解決

XQuery式がnull以外のノードリストに評価された場合、

.exist()メソッドは、それ以外の場合は0だから、それはあなたの例では1時間ごとに戻ります返し、1を返します。

私が正しくあなたを理解していれば、それはXMLだとき、あなたは値がちょうど整数であるとき、それは1を返すようにしたい、と0?

その場合は、次の操作を実行する必要があります:

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。

他のヒント

XQueryの中にビルトインタイプのテストはどう?

. instance of xs:integer
コンテキスト項目が整数である場合は、

それ以外の場合はfalse、あなたは真のブール値が得られます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top