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

Làm thế nào để tách trường dữ liệu biểu tượng trên bảng tạm thời thành 5 cột?

Giải pháp rất dễ dàng:

  1. chia các giá trị theo \s (dấu cách) bảo toàn thứ tự của các phần tử
  2. xoay vòng kết quả
  3. chỉ trích xuất các số hoặc chỉ các chữ cái từ cột cụ thể

Để tách các giá trị, bạn có thể sử dụng XML như cái này . Để chỉ trích xuất các số, bạn có thể thực hiện một chuỗi REPLACE s loại bỏ tất cả các đơn vị. Để xóa các số và để lại văn bản, bạn có thể sử dụng REPLACE s một lần nữa.

Trong môi trường của tôi, tôi đang sử dụng rất nhiều hàm CLR của SQL và giải pháp trông như thế này:

SELECT PVT.id
      ,PVT.symbolData
      ,dbo.fn_Utils_RegexReplace ([0], '[^\d+]', '') AS [valuebefore]
      ,dbo.fn_Utils_RegexReplace ([0], '\d+', '') AS [unitbefore]
      ,[1] AS [symbole]
      ,dbo.fn_Utils_RegexReplace ([2], '[^\d+\.]', '') AS [valueafter]
      ,dbo.fn_Utils_RegexReplace ([2], '[\d+\.]', '') AS [unitafter]
FROM #TEMP
CROSS APPLY dbo.fn_Utils_RegexSplitWithOrder (SymbolData, '\s') RS
PIVOT
(
    MAX([value]) FOR [index] IN ([0], [1], [2])
) PVT
ORDER BY PVT.id;

Bạn có thể kiểm tra điều này trả lời để có được các chức năng như vậy trong môi trường của bạn.

Trong trường hợp của bạn, sẽ dễ dàng và an toàn hơn khi sử dụng XML để chia nhỏ dữ liệu và thay thế để định hình kết quả.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ràng buộc kiểm tra chồng chéo phạm vi ngày

  2. Trả về một trong hai cột trong chế độ xem - cột nào không rỗng

  3. gửi xml tới sql

  4. Tôi có thể chuyển đối số tới trình kích hoạt SQL Server bên ngoài (CLR) không?

  5. Cách Bỏ Ràng buộc Khoá Ngoại trong Cơ sở dữ liệu SQL Server - Hướng dẫn SQL Server / TSQL Phần 75