A veces simplemente no tiene la opción de almacenar números mezclados con texto. En una de nuestras aplicaciones, el host del sitio web que utilizamos para nuestro sitio de comercio electrónico crea filtros dinámicamente a partir de listas. No hay ninguna opción para ordenar por ningún campo que no sea el texto mostrado. Cuando queríamos que los filtros se construyeran a partir de una lista que dijera cosas como 2 "a 8" 9 "a 12" 13 "a 15", etc., lo necesitábamos para ordenar 2-9-13, no 13-2-9 como ocurrirá cuando leer los valores numéricos. Así que utilicé la función de replicación de SQL Server junto con la longitud del número más largo para rellenar los números más cortos con un espacio inicial. Ahora 20 se ordena después de 3, y así sucesivamente.
Estaba trabajando con una vista que me dio las longitudes, anchos, etc. mínimos y máximos para el tipo de elemento y la clase, y aquí hay un ejemplo de cómo hice el texto. (LB n Low y LB n High son los extremos inferior y superior de los 5 soportes de longitud).
REPLICATE(' ', LEN(LB5Low) - LEN(LB1High)) + CONVERT(NVARCHAR(4), LB1High) + '" and Under' AS L1Text,
REPLICATE(' ', LEN(LB5Low) - LEN(LB2Low)) + CONVERT(NVARCHAR(4), LB2Low) + '" to ' + CONVERT(NVARCHAR(4), LB2High) + '"' AS L2Text,
REPLICATE(' ', LEN(LB5Low) - LEN(LB3Low)) + CONVERT(NVARCHAR(4), LB3Low) + '" to ' + CONVERT(NVARCHAR(4), LB3High) + '"' AS L3Text,
REPLICATE(' ', LEN(LB5Low) - LEN(LB4Low)) + CONVERT(NVARCHAR(4), LB4Low) + '" to ' + CONVERT(NVARCHAR(4), LB4High) + '"' AS L4Text,
CONVERT(NVARCHAR(4), LB5Low) + '" and Over' AS L5Text