आप इसे नीचे दिए गए PATINDEX() फ़ंक्शन का उपयोग करके कर सकते हैं:
select * from Test
order by CAST(SUBSTRING(Name + '0', PATINDEX('%[0-9]%', Name + '0'), LEN(Name + '0')) AS INT)
एसक्यूएल फिडल डेमो
यदि आपके पास स्ट्रिंग के बीच में संख्याएं हैं तो आपको स्ट्रिंग से संख्या प्राप्त करने के लिए छोटे उपयोगकर्ता परिभाषित फ़ंक्शन बनाने की आवश्यकता है और नीचे दिए गए नंबर के आधार पर डेटा सॉर्ट करें:
CREATE FUNCTION dbo.fnGetNumberFromString (@strInput VARCHAR(255))
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @intNumber int
SET @intNumber = PATINDEX('%[^0-9]%', @strInput)
WHILE @intNumber > 0
BEGIN
SET @strInput = STUFF(@strInput, @intNumber, 1, '')
SET @intNumber = PATINDEX('%[^0-9]%', @strInput)
END
RETURN ISNULL(@strInput,0)
END
GO
आप डेटा को इसके अनुसार क्रमित कर सकते हैं:
select Name from Test order by dbo.fnGetNumberFromString(Name), Name