Parfois, vous n'avez tout simplement pas le choix de stocker des chiffres mélangés à du texte. Dans l'une de nos applications, l'hôte du site web que nous utilisons pour notre site de commerce électronique crée des filtres de manière dynamique à partir de listes. Il n'y a pas d'option pour trier par un champ quelconque, sauf le texte affiché. Lorsque nous voulions des filtres construits à partir d'une liste qui disait des choses comme 2 pouces à 8 pouces 9" à 12" 13" à 15" etc., nous avions besoin de trier 2-9-13, et non 13-2-9 comme il le ferait en lisant les valeurs numériques. J'ai donc utilisé la fonction de réplication du serveur SQL ainsi que la longueur du plus long nombre pour compléter les nombres plus courts avec un espace. Maintenant, 20 est trié après 3, et ainsi de suite.
Je travaillais avec une vue qui me donnait les longueurs, largeurs, etc. minimales et maximales pour le type et la classe de l'article, et voici un exemple de la façon dont j'ai fait le texte. (LB n Bas et LB n High sont les extrémités basse et haute des 5 fourchettes de longueur).
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