J'ai une table avec une colonne Quantity
; dans la table d'origine, cette colonne est définie par nvarchar(100)
. Je dois donc la convertir en float pour pouvoir effectuer certaines analyses:
CAST([Quantity] AS FLOAT) AS Quantity
Le problème est que j'ai certaines valeurs qui ne peuvent pas être converties en float comme No-Quantity
, Return
etc. Je souhaite que le filtre exclue ces valeurs, puis convertisse rest en float.On est une clause use where:
WHERE Quantity IN ('Return', 'Sales')
Ce n'est pas la meilleure solution car si nous avons de nouvelles valeurs dans la table d'origine, je dois déterminer ce que c'est et l'ajouter à la clause where.
Je me demande s'il existe un meilleur moyen d'identifier les valeurs non convertibles?
Dans n'importe quelle base de données, vous pouvez utiliser cast()
et quelque chose comme ceci:
(case when quantity not in ('No-Quantity', 'Return', . . .)
then CAST([Quantity] as float)
end) as Quantity
La liste in
serait la liste des valeurs de chaîne connues.
Vous pouvez également faire un test rapide et sale comme ceci:
(case when left(quantity, 1) between '0' and '1'
then CAST([Quantity] as float)
end) as Quantity
(Remarque: vous devrez peut-être utiliser substr()
ou substring()
au lieu de left()
.)
Et, en général, toute base de données spécifique a des fonctions spécifiques qui peuvent aider à la conversion, telles que try_convert()
mentionné dans un commentaire.
Si votre serveur SQL prend en charge TRY_CONVERT
, cela pourrait fournir une solution intéressante:
SELECT TRY_CONVERT (float, [Quantity]) ...
vous donnera les valeurs converties ou NULL en fonction de l’entrée. Cela peut être utile si vous n’exercez pas un contrôle strict sur les données.
Autre moyen (si vous ne pouvez pas utiliser TRY_CONVERT
)
SELECT CAST(quantity AS float)
FROM myTable
WHERE IsNumeric(quantity) = 1 AND quantity IS NOT NULL