J'ai donc récemment rencontré un bogue bizarre lors de la comparaison de deux valeurs.T-SQL ORDER BY ignore "'-' + ..." mais pas "'+' + ..."
Mes valeurs étaient comprises entre -1 et 2. Quelquefois, on pensait que -1 était supérieur à 0, la solution était facile. Apparemment, la colonne était définie sur varchar (50) au lieu de int.
Mais cela m'a fait penser pourquoi cela est arrivé. Parce que même si la colonne a été définie à varchar (50), le '-' devrait avoir une valeur char inférieure à '0' (charvalue pour '-' est 45 et charvalue pour '0' devrait être 48)
quelques tests et il s'avère, ce que je peux trouver, que '-' est le seul caractère que ORDER BY ne se soucie pas.
Exemple:
SELECT
A.x
FROM
(
VALUES
('-5'), ('-4'), ('-3'), ('-2'), ('-1'),
('0'), ('1'), ('2'), ('3'), ('4'), ('5')
) A(x)
ORDER BY
A.x;
SELECT
B.x
FROM
(
VALUES
('+5'), ('+4'), ('+3'), ('+2'), ('+1'),
('0'), ('1'), ('2'), ('3'), ('4'), ('5')
) B(x)
ORDER BY
B.x
Résultat:
Result of A
0
1
-1
2
-2
3
-3
4
-4
5
-5
Result of B
+1
+2
+3
+4
+5
0
1
2
3
4
5
(+ a une charValue de 43)
Le '+' order by sent droit, mais le '-' semble .. mauvais
Quelqu'un sait pourquoi c'est comme ça?
Informations complémentaires
version Server: 12.0.4213
Collation: Finnish_Swedish_CI_AS
Aucune idée de ce qui pourrait fausser le résultat d'autre. Demandez si vous avez besoin de plus d'informations.
Excusez mon ignorance, mais quelles sont les fonctions' A (x) 'et' B (x) '? –
J'obtiens des résultats normaux/attendus – Paparazzi
Les lettres A et B sont juste des noms pour les tables créées et x est le nom de la colonne unique dans la table créée. J'aurais pu le rendre plus clair, désolé: P –