समाधान आसान है:
- मानों को
\s
से विभाजित करें (अंतरिक्ष) तत्वों के क्रम को संरक्षित करना - परिणाम को पिवट करें
- विशिष्ट कॉलम से केवल संख्याएं या केवल अक्षर निकालें
मानों को विभाजित करने के लिए आप XML
. का उपयोग कर सकते हैं जैसे यह
. केवल नंबर निकालने के लिए आप REPLACE
. की एक श्रृंखला निष्पादित कर सकते हैं सभी इकाइयों को हटा रहा है। संख्याओं को हटाने और टेक्स्ट छोड़ने के लिए, आप REPLACE
. का उपयोग कर सकते हैं एस फिर से।
अपने परिवेश में, मैं बहुत से SQL CLR फ़ंक्शंस का उपयोग कर रहा हूँ और समाधान इस तरह दिखता है:
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;
आप यह देख सकते हैं अपने परिवेश में भी ऐसे कार्यों को प्राप्त करने के लिए उत्तर दें।
आपके मामले में, डेटा को विभाजित करने और परिणामों को आकार देने के लिए प्रतिस्थापित करने के लिए XML का उपयोग करना आसान और सुरक्षित होगा।