2012-01-04 4 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" 

私の唯一の問題は、最初の住所ブロックは、住所1が含まれており、第二住所ブロックは、都市が含まれている場合も、レコードを返します。このなステートメントです。

+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

soooたくさんありがとう – user1129290

関連する問題