Как обнаружить строку данных из XML в Xquery - PullRequest
3 голосов
/ 20 февраля 2009

У меня есть нетипизированный столбец XML в базе данных сервера Sql, в котором хранятся такие значения, как

 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 в таких случаях.

Есть ли выход?

Ответы [ 2 ]

3 голосов
/ 20 февраля 2009

Метод .exist () возвращает 1, если выражение XQuery оценивается как ненулевой список узлов, в противном случае он возвращает 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 голосов
/ 30 апреля 2009

Как насчет встроенного теста типов в XQuery?

. instance of xs:integer

Даст вам логическое значение true, если элемент контекста является целым числом, в противном случае - false.

...