A volte semplicemente non hai scelta di dover memorizzare numeri mescolati con il testo. In una delle nostre applicazioni, l'host del sito Web che utilizziamo per il nostro sito di e-commerce crea filtri dinamicamente fuori dagli elenchi. Non è possibile ordinare in base a qualsiasi campo tranne il testo visualizzato. Quando volevamo che i filtri costruissero un elenco che dicesse cose come da 2 "a 8" da 9 "a 12" da 13 "a 15" ecc., Ne avevamo bisogno per ordinare 2-9-13, non 13-2-9 come farà quando leggere i valori numerici. Quindi ho usato la funzione di replica di SQL Server insieme alla lunghezza del numero più lungo per riempire qualsiasi numero più corto con uno spazio iniziale. Ora 20 viene ordinato dopo 3 e così via.
Lavoravo con una vista che mi dava le lunghezze minime e massime, le larghezze, ecc. Per il tipo e la classe dell'elemento, ed ecco un esempio di come ho scritto il testo. (LB n Low e LB n High sono le estremità inferiore e superiore delle 5 parentesi di lunghezza.)
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