A volte abbiamo la necessità di convertire i numeri in parole. Scrivere la procedura di conversione in un linguaggio di programmazione non sempre è opportuno. Ecco a Voi una funzione per sql server 2000-2005 che restituisce il valore scritto di un numero.
Uno dei vantaggi di questa funzione è che può essere usata da qualsiasi programma indipendentemente dal linguaggio.
--------------------------------------------------------------------------
-- Funzione per convertire valori numerici in numeri scritti
-- GetStringValueOfMoney
-- Yuriy Ivlyev
-- yuriy.ivlyev@gmail.com
--------------------------------------------------------------------------
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID (N'ParseNum', N'FN') IS NOT NULL
DROP FUNCTION dbo.ParseNum;
GO
CREATE function ParseNum (@Num BIGINT)
returns varchar(255)
as
begin
declare @nword varchar(255), @th tinyint, @gr smallint, @d3 tinyint, @d2
tinyint, @d1 tinyint
if @Num<0 return '*** Error: Valore negativo' else if @Num=0 return 'Zero'
while @Num>0
begin
set @th=IsNull(@th,0)+1 set @gr=@Num%1000 set @Num=(@Num-@gr)/1000
if @gr>0
begin
set @d3=(@gr-@gr%100)/100
set @d1=@gr%10
set @d2=(@gr-@d3*100-@d1)/10
if @d2=1 set @d1=10+@d1
set @nword=case @d3
when 1 then 'cento'
when 2 then 'duecento'
when 3 then 'trecento'
when 4 then 'quattrocento'
when 5 then 'cinquecento'
when 6 then 'seicento'
when 7 then 'settecento'
when 8 then 'ottocento'
when 9 then 'novecento'
else '' end
+case @d2
when 2 then 'vent'+ (case when @d1 in (1,8) then '' else 'i' end)
when 3 then 'trent' + (case when @d1 in (1,8) then '' else 'a' end)
when 4 then 'quarant' + (case when @d1 in (1,8) then '' else 'a' end)
when 5 then 'cinquant' + (case when @d1 in (1,8) then '' else 'a' end)
when 6 then 'sessant' + (case when @d1 in (1,8) then '' else 'a' end)
when 7 then 'settant' + (case when @d1 in (1,8) then '' else 'a' end)
when 8 then 'ottant' + (case when @d1 in (1,8) then '' else 'a' end)
when 9 then 'novant' + (case when @d1 in (1,8) then '' else 'a' end)
else '' end
+case @d1
when 1 then (case when (@th > 1 and @D2 < 1) then '' else 'uno' end)
when 2 then 'due'
when 3 then 'tre'
when 4 then 'quattro'
when 5 then 'cinque'
when 6 then 'sei'
when 7 then 'sette'
when 8 then 'otto'
when 9 then 'nove'
when 10 then 'dieci'
when 11 then 'undici'
when 12 then 'dodici'
when 13 then 'tredici'
when 14 then 'quattordici'
when 15 then 'quindici'
when 16 then 'sedici'
when 17 then 'diciasette'
when 18 then 'diciotto'
when 19 then 'dicianove'
else '' end
+case @th
when 2 then 'mil' +(case when (@d1= 1 and @d2 = 0 ) then 'le' else 'a' end)
when 3 then 'million' + (case when @d1 = 1 then 'e' else 'i' end)
when 4 then 'milliard' + (case when @d1 = 1 then 'o' else 'i' end)
when 5 then 'trillion' + (case when @d1 = 1 then 'e' else 'i' end)
when 6 then 'quadrillion' + (case when @d1 = 1 then 'e' else 'i' end)
when 7 then 'quintillion' + (case when @d1 = 1 then 'e' else 'i' end)
else '' end
+IsNull(@nword,'')
end
end
return @nword
end
GO