Si vos colonnes de partition contiennent des données stockées en tant que varchar, vous pouvez les convertir en décimal à l'aide de la fonction CAST
. Par exemple:
mysql> select cast('3.35643294332' as decimal(10,3));
+----------------------------------------+
| cast('3.35643294332' as decimal(10,3)) |
+----------------------------------------+
| 3.356 |
+----------------------------------------+
1 row in set (0,01 sec)
Et notez cela va arrondir les valeurs correctement:
mysql> select cast('3.35663294332' as decimal(10,3));
+----------------------------------------+
| cast('3.35663294332' as decimal(10,3)) |
+----------------------------------------+
| 3.357 |
+----------------------------------------+
1 row in set (0,00 sec)
-à-dire:
'3.3564'
a été casté à 3.356
- et
'3.3566'
a été casté à 3.357
Maintenant, il vous suffit d'utiliser cette fonction cast
dans vos comparaisons dans votre clause where
.
Je suppose que quelque chose comme cela devrait fonctionner, par exemple:
select *
from your_table
where cast(Score as decimal(10,3)) = cast('3.4564' as decimal(10,3))
à savoir, vous convertir à la fois la « entrée » et le score à 3 décimales avec décimales; et vous convertissez ces valeurs. Pour ce faire, vous n'utiliserez aucun index que vous pourriez avoir sur Score, et vous obtiendrez toujours un scan complet ... Ce qui signifie qu'une autre solution serait meilleure. Par exemple, si vous pouviez utiliser une clause where comme score >= X and Score <= Y
, ce serait beaucoup mieux ...
Mais, comme Score est stocké en tant que varchar, ce ne sera pas si facile, je suppose - vous devriez stocker ceux-ci en tant que décimales, btw ...
pourquoi les partitions sont-elles stockées en tant que texte et non en tant que nombres? – cherouvim
Parce que celui qui a créé la table pensait que ce serait plus facile à gérer ... maintenant c'est moi qui en paierai le prix. – erastusnjuki