2 votes

Pourquoi le casting échoue-t-il lorsque j'utilise ISNUMERIC() ?

SELECT CAST([Revenue Size (M)] AS float)
FROM Raw_Data A
WHERE ISNUMERIC([Revenue Size (M)]) = 1

Je reçois une erreur :

Erreur de conversion du type de données nvarchar en float

Taille des revenus (M) Échantillons : 7371 ,7372 ,4899 ,59.5 ,1.4 ,2 ,3400

5voto

Gordon Linoff Points 213350

Il y a de multiples exemples où isnumeric() renvoie à 1 mais la valeur ne peut pas être convertie en un nombre à virgule flottante. Voici quatre exemples :

  • '.'
  • '-'
  • '-.'
  • '$1'

Vous pouvez le voir dans cette Fiddle SQL .

La meilleure solution est d'utiliser try_cast() :

SELECT TRY_CAST([Revenue Size (M)] AS float)
FROM Raw_Data A
WHERE TRY_CAST([Revenue Size (M)] AS float) IS NOT NULL;

1voto

John Cappelletti Points 43460

Gordon est correct +1

Cependant, j'ai tendance à utiliser l'ARGENT lorsque c'est raisonnable ... Il semble être un peu plus indulgent.

Exemple

Select AsMoney = try_convert(money,'$5,125')
      ,AsFloat = try_convert(float,'$5,125')
      ,AsInt   = try_convert(int,'$5,125')
      ,AsDec   = try_convert(decimal(10,2),'$5,125')

Résultats

AsMoney     AsFloat     AsInt       AsDec
5125.00     NULL        NULL        NULL

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X