Homa Page di Daniele Franceschini
Formattare e convertire in valuta gli importi
Purtroppo in transact-sql non esiste una funzione che permetta la conversione da una valuta ad un'altra, o di formattare un importo in funzione della valuta utilizzata. Queste funzionalità le si possono trovare nei vari linguaggi di programmazione, tuttavia secondo me sarebbe utile aggiungere questo tipo di funzionalità nei database in modo da poter rappresentare correttamente gli importi nei formati richiesti dalle specifiche valute e avere anche, il cambio degli importi nella valuta espressa. Per queste ragioni ho abbozzato questa funzione t-sql che vuole solo essere un punto di partenza per chi volesse gestire le proprie valute sul database.
La funzione accetta 4 parametri:
1. Il prezzo da formattare e convertire
2. La valuta da utilizzare
3. Il cambio da applicare
4. Numero dei decimali che si vogliono
La funzione parte dal presupposto che i prezzi siano in valuta dollari, la valuta di riferimento con cui solitamente vengono salvati i prezzi nei DB multivaluta.
CREATE FUNCTION dbo.format_convert_price(@price money, @currency CHAR(3) = 'eur',
@cambio VARCHAR(5) = '0.8', @decimali SMALLINT = 2)
RETURNS VARCHAR(20)
AS
BEGIN
--Questa funzione prende in considerazione solo le seguenti valute:
-- usd Dollari
-- eur Euro
-- rub Rubli
-- gbp Sterline
-- cad Dollari Canadesi
-- aud Dollari Australiani
-- jpy Yen Giapponesi
-- won Valuta Coreana
-- cny Valuta Cinese
-- nok Corone Norvegesi
-- sek Corone swedesi
-- dkk Corone Danesi
DECLARE @ret VARCHAR(20)
DECLARE @pos SMALLINT
IF (@currency = 'usd')
SET @ret = CONVERT(varchar(20), (@price / 100), 1)
ELSE
IF (@currency = 'eur')
BEGIN
SET @ret = CONVERT(VARCHAR(20),(@price/100) * @cambio)
SET @pos = CHARINDEX('.', @ret)
SET @ret = SUBSTRING(@ret, 1, @pos + @decimali)
SET @ret = CONVERT(varchar(20), CONVERT(MONEY,@ret), 1)
SET @ret = REPLACE(@ret, '.', 'p')
SET @ret = REPLACE(@ret, ',', 'v')
SET @ret = REPLACE(@ret, 'p', ',')
SET @ret = REPLACE(@ret, 'v', '.')
END
ELSE
IF (@currency = 'rub')
BEGIN
SET @ret = CONVERT(VARCHAR(20),(@price/100) * @cambio)
SET @pos = CHARINDEX('.', @ret)
SET @ret = SUBSTRING(@ret, 1, @pos + @decimali)
SET @ret = CONVERT(varchar(20), CONVERT(MONEY,@ret), 1)
SET @ret = REPLACE(@ret, '.', '')
SET @ret = REPLACE(@ret, ',', '')
END
ELSE
IF (@currency = 'gbp') OR (@currency = 'cad') OR (@currency = 'aud')
BEGIN
SET @ret = CONVERT(VARCHAR(20),(@price/100) * @cambio)
SET @pos = CHARINDEX('.', @ret)
SET @ret = SUBSTRING(@ret, 1, @pos + @decimali)
SET @ret = CONVERT(varchar(20), CONVERT(MONEY,@ret), 1)
END
ELSE
IF (@currency = 'jpy') OR (@currency = 'won') OR (@currency = 'cny')
BEGIN
SET @ret = CONVERT(VARCHAR(20),(@price/100) * @cambio)
SET @pos = CHARINDEX('.', @ret)
SET @ret = SUBSTRING(@ret, 1, @pos + @decimali)
SET @ret = CONVERT(varchar(20), CONVERT(MONEY,@ret), 1)
SET @ret = SUBSTRING(@ret, 1, CHARINDEX('.', @ret) - 1)
END
ELSE
IF (@currency = 'nok') OR (@currency = 'sek') OR (@currency = 'dkk')
BEGIN
SET @ret = CONVERT(VARCHAR(20),(@price/100) * @cambio)
SET @pos = CHARINDEX('.', @ret)
SET @ret = SUBSTRING(@ret, 1, @pos + @decimali)
SET @ret = CONVERT(varchar(20), CONVERT(MONEY,@ret), 1)
SET @ret = SUBSTRING(@ret, 1, CHARINDEX('.', @ret) - 1)
END
RETURN @ret
END
GO
--un paio di esempi per vedere come funzione
SELECT dbo.format_convert_price(1620000.00, 'usd', 1, DEFAULT)
--formattazione americana 16,200.00
SELECT dbo.format_convert_price(1350000.00, 'eur', 0.8, DEFAULT)
--formattazione americana 10.800,00



