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

Tách chuỗi phân cách có độ dài thay đổi thành nhiều hàng (SQL)

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận giá trị trả lại từ JDBC MSSQL

  2. Trợ giúp kích hoạt máy chủ sql - cùng một bảng cập nhật

  3. Đăng nhập không thành công cho người dùng 'DOMAIN \ MACHINENAME $'

  4. SqlCommand sao lưu Cơ sở dữ liệu

  5. Tôi đã mất cơ sở dữ liệu SQL Server 2008, tôi cần lấy lại cấu trúc cơ sở dữ liệu từ lược đồ LINQ