Solusinya mudah:
- bagi nilai dengan
\s
(spasi) menjaga urutan elemen - memutar hasil
- ekstrak hanya angka atau hanya huruf dari kolom tertentu
Untuk membagi nilai, Anda dapat menggunakan XML
seperti ini
. Untuk mengekstrak hanya angka, Anda dapat melakukan rangkaian REPLACE
s menghapus semua unit. Untuk menghapus angka dan meninggalkan teks, Anda dapat menggunakan REPLACE
s lagi.
Di lingkungan saya, saya menggunakan banyak fungsi SQL CLR dan solusinya terlihat seperti ini:
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;
Anda dapat memeriksa ini jawaban untuk mendapatkan fungsi seperti itu di lingkungan Anda juga.
Dalam kasus Anda, akan lebih mudah dan aman menggunakan XML untuk membagi data dan menggantinya untuk membentuk hasil.