试试这个
SELECT *
FROM t
ORDER BY
CASE PATINDEX('%[^0-9]%', PARSENAME(name, 4))
WHEN 0 THEN RIGHT('0000' + PARSENAME(name, 4), 4)
WHEN 1 THEN PARSENAME(name, 1)
ELSE RIGHT('0000' + SUBSTRING(PARSENAME(name, 2), 1, PATINDEX('%[^0-9]%', PARSENAME(name, 2)) - 1), 4) + SUBSTRING(PARSENAME(name, 2), PATINDEX('%[^0-9]%', PARSENAME(name, 2)), LEN(name))
END
, CASE PATINDEX('%[^0-9]%', PARSENAME(name, 3))
WHEN 0 THEN RIGHT('0000' + PARSENAME(name, 3), 4)
WHEN 1 THEN PARSENAME(name, 1)
ELSE RIGHT('0000' + SUBSTRING(PARSENAME(name, 2), 1, PATINDEX('%[^0-9]%', PARSENAME(name, 2)) - 1), 4) + SUBSTRING(PARSENAME(name, 2), PATINDEX('%[^0-9]%', PARSENAME(name, 2)), LEN(name))
END
, CASE PATINDEX('%[^0-9]%', PARSENAME(name, 2))
WHEN 0 THEN RIGHT('0000' + PARSENAME(name, 2), 4)
WHEN 1 THEN PARSENAME(name, 1)
ELSE RIGHT('0000' + SUBSTRING(PARSENAME(name, 2), 1, PATINDEX('%[^0-9]%', PARSENAME(name, 2)) - 1), 4) + SUBSTRING(PARSENAME(name, 2), PATINDEX('%[^0-9]%', PARSENAME(name, 2)), LEN(name))
END
, CASE PATINDEX('%[^0-9]%', PARSENAME(name, 1))
WHEN 0 THEN RIGHT('0000' + PARSENAME(name, 1), 4)
WHEN 1 THEN PARSENAME(name, 1)
ELSE RIGHT('0000' + SUBSTRING(PARSENAME(name, 2), 1, PATINDEX('%[^0-9]%', PARSENAME(name, 2)) - 1), 4) + SUBSTRING(PARSENAME(name, 2), PATINDEX('%[^0-9]%', PARSENAME(name, 2)), LEN(name))
END
为此:
1.1.1.Question
1.1.1.QuestionText
1.1.1(a).Questions
1.1.2.Questionswithtext
1.1.2(b).Text
2.1.1.Questions
2.2.2.QuestionText
10.1.1.Answers