2012-01-04 2 views
1

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

<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" 

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

+0

Это для SQL Server? –

ответ

0

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

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

Большое спасибо – user1129290

Смежные вопросы