Giải pháp rất dễ dàng:
- chia các giá trị theo
\s
(dấu cách) bảo toàn thứ tự của các phần tử - xoay vòng kết quả
- 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ả.