Per un vecchio cliente che ha ancora un database Microsoft Sql Server 2008 R2, è nata l’esigenza di esplodere l’output di una tabella pivot abbastanza complessa formattando i numeri in formato valuta.
Dalla versione 2012 Sql Server mette a disposizione la classica funzione format, per cui con la semplice sintassi:
SELECT FORMAT ( @date, 'D', it-IT' ) AS DataFormattata;
è semplice tirare fuori un numero in formato valuta.
Le cose si complicano per Sql Server 2008 dove la funzione format non esisteva ancora.
L’unico modo che sono riuscito a trovare dopo una serie innumerevole di tentativi, è quello di creare una funzione scalare personalizzata che ho inserito nel database risolvendo così il problema.
CREATE FUNCTION [dbo].[FormattaValuta] (@input VARCHAR(20))
RETURNS VARCHAR(20)
AS BEGIN
DECLARE @Work VARCHAR(250)
SET @Work = @Input
SET @Work = replace(replace(replace(CONVERT(varchar, CAST(@Work AS money), -1),',','/'),'.',','),'/','.') + ' €'
RETURN @work
END
Per prima cosa create una nuova query vuota puntando il database di destinazione e lanciate questo script:
A questo punto nel database Sql Server 2008 è presente la funzione format che possiamo utilizzare in questo modo:
SELECT FormattaValuta ( CampoDataNonFormnattato) AS DataFormattata;
Fatemi sapere se funziona 🙂