Saltar al contenido

SQL Server 2008: cómo formatear la salida como moneda

Posteriormente a mirar en diferentes repositorios y sitios de internet al terminar descubrimos la respuesta que te enseñaremos pronto.

Solución:

Si estás buscando un “true” Formato de moneda, similar a lo que se puede lograr a través de la función FORMAT que comenzó en SQL Server 2012, luego puede lograr exactamente la misma funcionalidad a través de SQLCLR. Puede codificar el simple .ToString("C" [, optional culture info]) usted mismo, o puede descargar la biblioteca SQL # (que escribí, pero esta función está en la versión gratuita) y usarla como T-SQL FORMAT función.

Por ejemplo:

SELECT SQL#.Math_FormatDecimal(123.456, N'C', N'en-us');

Producción:

$123.46

SELECT SQL#.Math_FormatDecimal(123.456, N'C', N'fr-fr');

Producción:

123,46 €

Este enfoque funciona en SQL Server 2005/2008/2008 R2. Y, si / cuando actualiza a una versión más nueva de SQL Server, tiene la opción de cambiar fácilmente a la función T-SQL nativa simplemente cambiando el nombre SQL#.Math_FormatDecimal ser justo FORMAT.

Poniendo esto en el contexto de la consulta de la pregunta original:

SELECT SQL#.Math_FormatDecimal(COALESCE(SUM(SUBTOTAL),0), N'C', N'en-us') AS [Total]
FROM dbo.SALESORD_HDR 
where ORDERDATE = datediff(d,0,getdate()) 
and STATUS NOT IN (3,6)

EDITAR:

O, ya que parece que sólo en-us se desea el formato, hay un atajo que es demasiado fácil: convertir desde el MONEY o SMALLMONEY tipos de datos que usan la función CONVERT tiene un “estilo” para en-us menos el símbolo de la moneda, pero eso es bastante fácil de agregar:

SELECT '$' + CONVERT(VARCHAR(50),
                CONVERT(MONEY, COALESCE(SUM(SUBTOTAL), 0)),
                1) AS [Total]
FROM dbo.SALESORD_HDR 
where ORDERDATE = datediff(d,0,getdate()) 
and STATUS NOT IN (3,6)

Dado que el tipo de datos de origen del SUBTOTAL el campo es FLOATprimero debe convertirse a MONEY y luego convertida en VARCHAR. Pero, el “estilo” opcional es una de las razones por las que prefiero CONVERT sobre CAST.

Aquí hay una sugerencia de la sintaxis a usar para preparar la consulta de búsqueda para el futuro.

select format(123.56789,'C2','en-US')  --$123.57 ;
select format(123.56789,'C3','en-US') --$123.568;
select format(123.56789,'C0','en-US') --$124

Al final de todo puedes encontrar las críticas de otros creadores, tú asimismo tienes la habilidad insertar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *