Menggabungkan isi field menjadi satu String di MS SQL 2005 April 21, 2010
Posted by layyuddi in SQL.Tags: alternative concatenate, Menggabungkan isi field
trackback
Ketika kita membutuhkan data dari isi kolom menjadi satu string. Kita bisa menggunakan sintak for xml.
Contohnya saya akan menggabungkan isi dari field name pada sys.databases :
select Name from sys.databases where database_id > 4
| Name |
| Temp |
| Liquibase |
| NorthWind |
| EMPLOYEES |
Dengan query berikut kita bisa menggabungkan nama tersebut :
select
stuff(
(select ', ' + name -- Note the lack of column name
from sys.databases
where database_id > 4
order by name
for xml path('')
)
, 1, 2, '') as Namelist;
| Namelist |
| EMPLOYEES, Liquibase, NorthWind, Temp |
Bagaimana jika kita ingin menambahkan tanda kurung siku pada setiap nama seperti berikut: <EMPLOYEES>, <Liquibase>, <NorthWind>, <Temp>
Jika kita menggunakan syntax seperti diatas :
select
stuff(
(select ', <' + name + '>'
from sys.databases
where database_id > 4
order by name
for xml path('')
)
, 1, 2, '') as namelist;
Hasilnya tanda < dan > muncul menjadi < dan > :
| namelist |
| <EMPLOYEES>, <Liquibase>, <NorthWind>, <Temp> |
Untuk mengatasi itu, kita bisa menambahkan sedikit syntak forxml nya. Berikut querynya :
select
stuff(
(select ', <' + name + '>'
from sys.databases
where database_id > 4
order by name
for xml path(''), root('MyString'), type
).value('/MyString[1]','varchar(max)')
, 1, 2, '') as namelist;
atau
select
stuff(
(select ', <' + name + '>'
from sys.databases
where database_id > 4
order by name
for xml path(''), type
).value('(./text())[1]','varchar(max)')
, 1, 2, '') as namelist
Hasilnya :
| namelist |
| <EMPLOYEES>, <Liquibase>, <NorthWind>, <Temp> |
Komentar»
No comments yet — be the first.