Trước tiên, hãy để tôi nói rằng đây là lý do mà bạn không có dữ liệu được phân tách bằng dấu phẩy trong một trường ngay từ đầu. Không có cách nào dễ dàng hoặc hiệu quả để làm việc với nó.
Điều đó nói rằng, bạn có thể sử dụng một truy vấn đệ quy để tách chuỗi và lấy các số từ nó:
with split as
(
select
item = cast('' as varchar(max)),
source = cast('20,0, 5,,^24,0, 0,,^26,0, 0,,^281,0, 0,,^34,0, 2,,^48,0, 2,,^44,0, 2,,^20,0, 10,,^20,5, 5,,^379,1, 1,,^26,1, 2,,^32,0, 1,,^71,0, 2,,^' as varchar(max))
union all
select
item = substring(source, 1, charindex(',,', source)),
source = substring(source, charindex(',,', source) + 2, 10000)
from split
where source > ''
)
select substring(item, 1, charindex(',', item) -1)
from split
where item > ''
Kết quả:
20
^24
^26
^281
^34
^48
^44
^20
^20
^379
^26
^32
^71