यह समाधान चुने हुए उत्तर की तुलना में अधिक विश्वसनीय है। यदि स्टेशन में 'EPA WELL 5 7' जैसी 1 से अधिक संख्याएँ हैं, तो यह उत्तर अपेक्षित उत्तर नहीं दे सकता है। यह समाधान संख्या को '0' से जोड़ रहा है इसलिए तुलना सभी संख्याओं को 8 अंकों पर विचार करेगी।
DECLARE @Table1 table([station] varchar(26))
INSERT INTO @Table1
([station])
VALUES
('ANTIL WELL 2'),
('ANTIL WELL 1'),
('BASELINE & CALIFORNIA WELL'),
('EPA WELL 7'),
('EPA WELL 6'),
('EPA WELL 108'),
('EPA WELL 109'),
('EPA WELL 110'),
('EPA WELL 111'),
('EPA WELL 112'),
('EPA WELL 108S'),
('EPA WELL 111108')
;
SELECT station
FROM @table1
ORDER BY
CASE WHEN station not like '%[0-9]%' THEN station ELSE
STUFF(station, PATINDEX('%[0-9]%',station), 0, replicate('0',
PATINDEX('%[0-9]%',station) - len(station) + PATINDEX('%[0-9]%',reverse(station)) + 6))
END
*GoatCD का उत्तर मेरे परीक्षण डेटा में सही क्रम नहीं देगा।