Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server sắp xếp chuỗi được phân tách bằng dấu phẩy trong một cột

Chỉ là một lưu ý phụ:những gì TheGameiswar đã đăng sẽ hoạt động rất tốt nếu miễn là @string không có bất kỳ ký tự XML đặc biệt nào. Nếu nó xảy ra, bạn sẽ cần phải thực hiện một điều chỉnh nhỏ. Cái này:

for xml path('')),1,1,'')

Cần phải trở thành cái này:

for xml path(''),TYPE).value('.', 'varchar(1000)'),1,1,'');

Hãy xem xét truy vấn sau cùng với nhận xét của tôi:

declare @string varchar(max)
set @string='<tag3>,<tag1>,<tag2>';

-- Note the output here:
;with cte
as
(
select *
from dbo.delimitedSplit8K(@string,',')
)
select stuff( (select ',' +item 
from cte
order by item
for xml path('')),1,1,'');

-- this will handle special XML characters:
WITH cte
as
(
select *
from dbo.delimitedSplit8K(@string,',')
)
select stuff( (select ',' +item 
from cte
order by item
for xml path(''),TYPE).value('.', 'varchar(1000)'),1,1,'');

Thay đổi tôi đang hiển thị sẽ làm giảm hiệu suất một chút nhưng xử lý các ký tự XML đặc biệt một cách chính xác.

Chỉnh sửa:Tôi quên đề cập- "bộ chia" tôi đang sử dụng là từ Bài viết này: http://www.sqlservercentral.com/articles/Tally+Table/72993/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SqlDataSourceEnumerator.Instance.GetDataSources () không định vị phiên bản SQL server 2008 cục bộ

  2. SQL Server:Chèn kết quả thủ tục được lưu trữ vào bảng dựa trên các tham số

  3. Cách bật tính năng ghi dữ liệu thay đổi (CDC) trên toàn bộ bảng HOẶC bật CDC trên bảng có danh sách cột trong SQL Server

  4. Làm cách nào để sử dụng SqlCommand để TẠO CƠ SỞ DỮ LIỆU với tên db được tham số hóa?

  5. Truy vấn hiệu quả để tách một cột được phân tách thành một bảng riêng biệt