Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana saya bisa menanyakan nilai di kolom SQL Server XML?

select
  Roles
from
  MyTable
where
  Roles.value('(/root/role)[1]', 'varchar(max)') like 'StringToSearchFor'

Jika kolom Anda bukan XML , Anda perlu mengonversinya. Anda juga dapat menggunakan sintaks lain untuk menanyakan atribut tertentu dari data XML Anda. Ini contohnya...

Misalkan kolom data memiliki ini:

<Utilities.CodeSystems.CodeSystemCodes iid="107" CodeSystem="2" Code="0001F" CodeTags="-19-"..../>

... dan Anda hanya menginginkan yang di mana CodeSystem = 2 maka kueri Anda akan menjadi:

select 
  [data] 
from
  [dbo].[CodeSystemCodes_data]
  
where
  CAST([data] as XML).value('(/Utilities.CodeSystems.CodeSystemCodes/@CodeSystem)[1]', 'varchar(max)') = '2'

Halaman-halaman ini akan menunjukkan kepada Anda lebih banyak tentang cara membuat kueri XML di T-SQL:

Membuat kueri bidang XML menggunakan t-sql

Meratakan Data XML di SQL Server

EDIT

Setelah bermain dengannya sedikit lagi, saya berakhir dengan kueri luar biasa yang menggunakan CROSS APPLY. Yang ini akan mencari setiap baris (peran) untuk nilai yang Anda masukkan ke dalam ekspresi suka Anda...

Mengingat struktur tabel ini:

create table MyTable (Roles XML)

insert into MyTable values
('<root>
   <role>Alpha</role>
   <role>Gamma</role>
   <role>Beta</role>
</root>')

Kita dapat menanyakannya seperti ini:

select * from 

(select 
       pref.value('(text())[1]', 'varchar(32)') as RoleName
from 
       MyTable CROSS APPLY

       Roles.nodes('/root/role') AS Roles(pref)
)  as Result

where RoleName like '%ga%'

Anda dapat memeriksa SQL Fiddle di sini:http://sqlfiddle.com/#!18/dc4d2/1/0



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa pembacaan logis untuk fungsi agregat berjendela begitu tinggi?

  2. Bagaimana cara membersihkan (mencegah injeksi SQL) SQL dinamis di SQL Server?

  3. DBA - Cara Membunuh Semua Proses Basis Data Di SQL Server

  4. SQL Server:Dapatkan kunci utama tabel menggunakan kueri sql

  5. Apakah ada SELECT ... INTO OUTFILE yang setara di SQL Server Management Studio?