Используете XPath-функцию normalize-string из SQL-запроса SQL? - PullRequest
1 голос
/ 13 апреля 2010

возможно ли выполнить запрос SQL с предложением XPath "where" и обрезать конечные пробелы перед сравнением?

У меня есть столбец SQL XML, в котором у меня есть узлы XML с атрибутами, которые содержат конечные пробелы. Я хотел бы найти заданную запись, которая имеет указанное значение атрибута - без завершающих пробелов.

Когда я пытаюсь, я получаю ...

"Нет функции" {http://www.w3.org/2004/07/xpath-functions}:normalize-space()'"

Я пробовал следующее (запрос 1 работает, запрос 2 - нет). Это на SQL 2005.

declare @test table (data xml)
insert into @test values ('<thing xmlns="http://my.org.uk/Things" x="hello " />')

-- query 1
;with xmlnamespaces ('http://my.org.uk/Things' as ns0)
select * from @test where data.exist('ns0:thing[@x="hello "]') != 0

-- query 2
;with xmlnamespaces ('http://my.org.uk/Things' as ns0)
select * from @test where data.exist('ns0:thing[normalize-space(@x)="hello"]') != 0

Спасибо за любую помощь,

Ross

Ответы [ 2 ]

1 голос
/ 13 апреля 2010

SQL Server также не включает функцию replace(), которая допускает регулярные выражения. Лучше всего использовать contains(), который должен работать для ваших поисков (проблема с вложенными подстроками не будет существовать, если вы не используете подстановочные знаки).

select * from @test where data.exist('ns0:thing[contains(@x, "hello")]') != 0 
0 голосов
/ 13 апреля 2010

Если это SQL Server 2005/2008, в SQLXML 4.0 эта функция (normalize) не поддерживается.

См. эту статью MSDN для более подробной информации.

Я бы предложил преобразовать XML в строку и использовать вместо него RTRIM, LTRIM и другие строковые функции SQL.

...