2017-10-19 14 views
0

Dans SQL Server, comment forcer le tri des valeurs à apparaître dans une certaine logique. Pour autant que je comprenne, SQL met d'abord les caractères, puis les nombres et les lettres lors du tri des valeurs.Comment forcer le tri des valeurs dans certaines logiques

Maintenant, j'ai besoin du trait de soulignement après la lettre. Par exemple, je ont une valeur de OA_G et une fourchette comprise entre MRI et OL5

Actuellement SQL met OA_G entre la plage. Mais j'ai besoin de le forcer à être hors de portée.

+2

A travers [classements ] (https://docs.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support#Collation_Defn) –

+0

Montrer un exemple de vos données – MelgoV

+1

La racine du problème est que vous avoir deux morceaux de données dans un seul tuple. Votre "groupe" indique que vous avez deux éléments de données qui violent 1NF et cause beaucoup de douleur. La meilleure solution serait de diviser vos données en deux colonnes. –

Répondre

3

Votre prémisse semble incorrecte. Indépendamment de la façon dont SQL Server trie les données de chaîne, qui, soit dit en passant, est contrôlée par la spécification de la collation de la base de données, si l'on devait trier manuellement, les résultats que vous recherchez ne pourraient pas être atteints. Pour savoir:

Étant donné les trois chaînes "MRI", "OL5" et "OA_G", triez-les dans l'ordre croissant par valeur de chaîne.

Bien sûr, cela se ferait caractère par caractère, en comparant chaque caractère de gauche à droite.

Puisque "M" vient avant "O", le premier membre de l'ensemble trié serait "IRM". Ensuite, comparez "OL5" et "OA_G". La lettre "O" est la même, alors vérifiez la position suivante. "L" est supérieur à "A" parce que c'est le 11ème caractère de l'alphabet, et "A" est le premier, donc le membre suivant sera "OA_G", laissant "OL5" comme membre final.

Il n'existe aucun ordre de classement SQL Server qui permettrait à cette évaluation de vous fournir les résultats que vous recherchez.

0

Si les parties de données sont comme MRI, OL5, OA_G etc, sont des constantes ou changent rarement, vous pouvez faire une table comme

Part | Priority 
MRI  | 1 
OL5  | 2 
OA_G | 3 

Rejoignez avec votre table et ORDER BY Priority