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 🙂