2010-09-24 63 views
15

Tengo que consultar la cantidad total de una columna usando una función agregada. El tipo de datos de columna es NVARCHAR (MAX). ¿Cómo puedo convertirlo a Entero?Consulta SQL para convertir nvarchar a int

He intentado esto:

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

... pero yo estoy haciendo:

Error de conversión al convertir el valor nvarchar '3600.00' al tipo de datos int.

Respuesta

29

3600,00 no es entero, emitidos a través de flotador primera

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

Editar:

Por qué flotan?

  • ni idea de la precisión o escala en todas las filas: flotador es el mal menor quizá
  • cadena vacía desechará a cero para flotador, falla en decimal
  • flotador acepta cosas como 5E-02, falla en decimal
+0

¿Por qué eligió flotador, en contraposición a decimal? Solo estoy curioso/tratando de aprender :) – JNK

+0

@JNK: porque es más tolerante que decimal. No tenemos idea de la precisión o la escala, la cuerda vacía se lanzará a cero para flotar, flotador acepta cosas como 5E-02 ... – gbn

8

Además de la respuesta de GBN, es necesario para proteger contra los casos no numéricos:

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

SELECT sum (Try_Parse (cantidad que Int Usando 'en-US')), rama DE tblProducts
donde id = 4 GROUP BY rama