我有SQLSERVER中的自定义函数。DELPHI中和这差不多。 CREATE FUNCTION [dbo].[UDF_NToC] (@number numeric(20,2), @dollar varchar(10)='', @cent varchar(10)='' ) RETURNS varchar(200) AS BEGIN Declare @million int,@thousand int,@digit int,@alpha varchar(100),@exp varchar(200) Declare @char varchar(100),@dot int,@decimal int,@intNumber intset @DOLLAR = isnull(@DOLLAR,'') set @cent = isnull(@cent,'') set @intNumber=floor(@number) set @exp='' if @number>1 begin set @million=floor(@intNumber/1000000)if @million>0 begin set @alpha = dbo.UDF_NTOC1000(@million) set @exp=@exp+@alpha+'MILLION' endset @thousand=floor((@intNumber-@million*1000000)/1000)if @thousand>0 begin set @alpha = dbo.UDF_NTOC1000(@thousand) if @exp<>'' set @exp=@exp+' AND '+@alpha+'THOUSAND' else set @exp=@alpha+'THOUSAND' endset @digit=@intNumber%1000 if @digit>0 begin set @alpha = dbo.UDF_NTOC1000(@digit) if @exp='' set @exp=@alpha else set @exp=@exp+' AND '+@alphaend set @exp=@DOLLAR+case @dollar when '' then '' else ' ' end+@exp end set @char=str(@number,20,2) set @dot=charindex('.',@char) set @decimal=convert(int,substring(@char,@dot+1,10)) if @decimal>0 begin set @alpha = dbo.UDF_NTOC1000(@decimal) set @exp=@exp+'AND '+@CENT+case @CENT when '' then '' else ' ' end+@alpha end return @exp END CREATE FUNCTION [DBO].[UDF_NToC1000] (@number int) RETURNS varchar(100) AS BEGIN declare @hundred int,@digit int ,@decimal int,@alpha varchar(10),@exp varchar(100)set @exp='' set @hundred=floor(@number/100) set @digit=floor((@number-@hundred*100)/10) set @decimal=@number%10if @hundred>0 begin select @alpha=dbo.UDF_NToE(@hundred) set @exp=@exp+rtrim(@alpha)+' HUNDRED ' end if @digit>1 begin select @alpha=dbo.UDF_NToE(@digit*10) set @exp=@exp+rtrim(@alpha)+' ' if @decimal>0 begin select @alpha=dbo.UDF_NToE(@decimal) set @exp=@exp+rtrim(@alpha)+' ' end end else begin if @digit<>0 or @decimal<>0 begin select @alpha=dbo.UDF_NToE(@digit*10+@decimal) set @exp=@exp+rtrim(@alpha)+' ' end end return @expENDCREATE FUNCTION [dbo].[UDF_NToE] (@number int) RETURNS varchar(10) AS BEGIN declare @capitalization varchar(10) if @number=1 set @capitalization= 'ONE' else if @number=2 set @capitalization= 'TWO' else if @number=3 set @capitalization= 'THREE' else if @number=4 set @capitalization= 'FOUR' else if @number=5 set @capitalization= 'FIVE' else if @number=6 set @capitalization= 'SIX' else if @number=7 set @capitalization= 'SEVEN' else if @number=8 set @capitalization= 'EIGHT' else if @number=9 set @capitalization= 'NINE' else if @number=10 set @capitalization= 'TEN' else if @number=11 set @capitalization= 'ELEVEN' else if @number=12 set @capitalization= 'TWELVE' else if @number=13 set @capitalization= 'THIRTEEN' else if @number=14 set @capitalization= 'FOURTEEN' else if @number=15 set @capitalization= 'FIFTEEN' else if @number=16 set @capitalization= 'SIXTEEN' else if @number=17 set @capitalization= 'SEVENTEEN' else if @number=18 set @capitalization= 'EIGHTEEN' else if @number=19 set @capitalization= 'NINETEEN' else if @number=20 set @capitalization= 'TWENTY' else if @number=30 set @capitalization= 'THIRTY' else if @number=40 set @capitalization= 'FORTY' else if @number=50 set @capitalization= 'FIFTY' else if @number=60 set @capitalization= 'SIXTY' else if @number=70 set @capitalization= 'SEVENTY' else if @number=80 set @capitalization= 'EIGHTY' else if @number=90 set @capitalization= 'NINETY' else set @capitalization= 'N/A'return @capitalizationEND
(@number numeric(20,2),
@dollar varchar(10)='',
@cent varchar(10)=''
)
RETURNS varchar(200)
AS
BEGIN
Declare @million int,@thousand int,@digit int,@alpha varchar(100),@exp varchar(200)
Declare @char varchar(100),@dot int,@decimal int,@intNumber intset @DOLLAR = isnull(@DOLLAR,'')
set @cent = isnull(@cent,'')
set @intNumber=floor(@number)
set @exp=''
if @number>1
begin
set @million=floor(@intNumber/1000000)if @million>0
begin
set @alpha = dbo.UDF_NTOC1000(@million)
set @exp=@exp+@alpha+'MILLION'
endset @thousand=floor((@intNumber-@million*1000000)/1000)if @thousand>0
begin
set @alpha = dbo.UDF_NTOC1000(@thousand)
if @exp<>''
set @exp=@exp+' AND '+@alpha+'THOUSAND'
else
set @exp=@alpha+'THOUSAND'
endset @digit=@intNumber%1000
if @digit>0
begin
set @alpha = dbo.UDF_NTOC1000(@digit)
if @exp=''
set @exp=@alpha
else
set @exp=@exp+' AND '+@alphaend
set @exp=@DOLLAR+case @dollar when '' then '' else ' ' end+@exp
end
set @char=str(@number,20,2)
set @dot=charindex('.',@char)
set @decimal=convert(int,substring(@char,@dot+1,10))
if @decimal>0
begin
set @alpha = dbo.UDF_NTOC1000(@decimal)
set @exp=@exp+'AND '+@CENT+case @CENT when '' then '' else ' ' end+@alpha
end
return @exp
END
CREATE FUNCTION [DBO].[UDF_NToC1000]
(@number int)
RETURNS varchar(100) AS
BEGIN declare @hundred int,@digit int ,@decimal int,@alpha varchar(10),@exp varchar(100)set @exp=''
set @hundred=floor(@number/100)
set @digit=floor((@number-@hundred*100)/10)
set @decimal=@number%10if @hundred>0
begin
select @alpha=dbo.UDF_NToE(@hundred)
set @exp=@exp+rtrim(@alpha)+' HUNDRED '
end
if @digit>1
begin
select @alpha=dbo.UDF_NToE(@digit*10)
set @exp=@exp+rtrim(@alpha)+' '
if @decimal>0
begin
select @alpha=dbo.UDF_NToE(@decimal)
set @exp=@exp+rtrim(@alpha)+' '
end
end
else
begin
if @digit<>0 or @decimal<>0
begin
select @alpha=dbo.UDF_NToE(@digit*10+@decimal)
set @exp=@exp+rtrim(@alpha)+' '
end
end
return @expENDCREATE FUNCTION [dbo].[UDF_NToE]
(@number int)
RETURNS
varchar(10)
AS
BEGIN
declare @capitalization varchar(10)
if @number=1
set @capitalization= 'ONE'
else if @number=2
set @capitalization= 'TWO'
else if @number=3
set @capitalization= 'THREE'
else if @number=4
set @capitalization= 'FOUR'
else if @number=5
set @capitalization= 'FIVE'
else if @number=6
set @capitalization= 'SIX'
else if @number=7
set @capitalization= 'SEVEN'
else if @number=8
set @capitalization= 'EIGHT'
else if @number=9
set @capitalization= 'NINE'
else if @number=10
set @capitalization= 'TEN'
else if @number=11
set @capitalization= 'ELEVEN'
else if @number=12
set @capitalization= 'TWELVE'
else if @number=13
set @capitalization= 'THIRTEEN'
else if @number=14
set @capitalization= 'FOURTEEN'
else if @number=15
set @capitalization= 'FIFTEEN'
else if @number=16
set @capitalization= 'SIXTEEN'
else if @number=17
set @capitalization= 'SEVENTEEN'
else if @number=18
set @capitalization= 'EIGHTEEN'
else if @number=19
set @capitalization= 'NINETEEN'
else if @number=20
set @capitalization= 'TWENTY'
else if @number=30
set @capitalization= 'THIRTY'
else if @number=40
set @capitalization= 'FORTY'
else if @number=50
set @capitalization= 'FIFTY'
else if @number=60
set @capitalization= 'SIXTY'
else if @number=70
set @capitalization= 'SEVENTY'
else if @number=80
set @capitalization= 'EIGHTY'
else if @number=90
set @capitalization= 'NINETY'
else
set @capitalization= 'N/A'return @capitalizationEND