2010-09-24 15 views
15

Je dois interroger pour le montant total d'une colonne en utilisant une fonction d'agrégat. Le type de données de colonne est NVARCHAR (MAX). Comment puis-je le convertir en Integer?Requête Sql pour convertir nvarchar en int

J'ai essayé:

SELECT SUM(CAST(amount AS INT)), 
     branch 
    FROM tblproducts 
    WHERE id = 4 
GROUP BY branch 

... mais je reçois:

La conversion a échoué lors de la conversion de la valeur nvarchar '3600.00' au type de données int.

Répondre

29

3600,00 est un entier pas CAST par flotteur premier

sum(CAST(CAST(amount AS float) AS INT)) 

Edit:

Pourquoi flotter?

  • aucune idée de précision ou échelle dans toutes les lignes: float est le moindre mal peut-être
  • chaîne vide jetteront à zéro pour flotteur, échoue sur décimal
  • flotteur accepte des choses comme 5E-02, échoue sur décimale
+0

pourquoi avez-vous choisi float, par opposition à la décimale? Je suis juste curieux/j'essaie d'apprendre :) – JNK

+0

@JNK: parce que c'est plus tolérant que décimal. Nous n'avons aucune idée de la précision ou de l'échelle, la chaîne vide sera mise à zéro pour float, float accepte des trucs comme 5E-02 ... – gbn

8

En plus de la réponse de GBN, vous devez protéger contre les cas non numériques:

sum(CASE WHEN ISNUMERIC(Amount)=1 THEN CAST(CAST(amount AS float) AS INT)END) 
0

SELECT sum (Try_Parse (montant en utilisant Int 'en-US)), branche DE tblProducts
WHERE id = 4 GROUP BY branche