Поиск соответствующих записей с использованием XQuery / XPath - PullRequest
1 голос
/ 04 января 2012

Я очень новичок в XQUERY / XPATH :), так что я вполне могу ошибиться. У меня есть объект customer, сериализованный и сохраненный в столбце базы данных в следующем формате.

<Customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Addresses>
<AddressBlock>
  <AddressLine1>1234 SomeStreet Ave.</AddressLine1>
  <City>SomeCity</City>
  <State>SomeState</State>
  <Zipcode>SomeZip</Zipcode>
</AddressBlock>
<AddressBlock>
  <AddressLine1>5678 SomeOtherStreet Ave.</AddressLine1>
  <City>SomeOtherCity</City>
  <State>SomeOtherState</State>
  <Zipcode>SomeOtherZip</Zipcode>
</AddressBlock>
</Addresses>
</Customer>

Я ищу способ выбрать эту запись, если адресная строка1 и город в одном и том же адресном блоке содержат определенные ключевые слова. У меня есть следующее утверждение, которое почти делает то, что я ищу.

select * 
from users 
where [UserData].exist('/Customer/Addresses/AddressBlock/AddressLine1/text()[contains(upper-case(.),""SOMESTREET"")]')=1
and [UserData].exist('/Customer/Addresses/AddressBlock/City/text()[contains(upper-case(.),""SOMECITY"")]')=1"

Моя единственная проблема заключается в том, что этот параметр также возвращает запись, если первый адресный блок содержит адресную строку1, а второй адресный блок содержит город.

1 Ответ

0 голосов
/ 04 января 2012

Вы должны проверить оба условия в одном и том же XQuery.

select * 
from users 
where [UserData].exist('/Customer/Addresses/AddressBlock
                         [contains(upper-case(AddressLine1[1]),"SOMESTREET") and 
                          contains(upper-case(City[1]),"SOMECITY")]')=1
...