CREATE TABLE THOUSAND ( num int, wrd varchar(30) ) INSERT INTO THOUSAND VALUES (0,'') INSERT INTO THOUSAND VALUES (1,'one') INSERT INTO THOUSAND VALUES (2,'two') INSERT INTO THOUSAND VALUES (3,'three') INSERT INTO THOUSAND VALUES (4,'four') INSERT INTO THOUSAND VALUES (5,'five') INSERT INTO THOUSAND VALUES (6,'six') INSERT INTO THOUSAND VALUES (7,'seven') INSERT INTO THOUSAND VALUES (8,'eight') INSERT INTO THOUSAND VALUES (9,'nine') INSERT INTO THOUSAND VALUES (10,'ten') INSERT INTO THOUSAND VALUES (11,'eleven') INSERT INTO THOUSAND VALUES (12,'twelve') INSERT INTO THOUSAND VALUES (13,'thirteen') INSERT INTO THOUSAND VALUES (14,'fourteen') INSERT INTO THOUSAND VALUES (15,'fifteen') INSERT INTO THOUSAND VALUES (16,'sixteen') INSERT INTO THOUSAND VALUES (17,'seventeen') INSERT INTO THOUSAND VALUES (18,'eighteen') INSERT INTO THOUSAND VALUES (19,'nineteen') INSERT INTO THOUSAND VALUES (20,'twenty') INSERT INTO THOUSAND VALUES (30,'thirty') INSERT INTO THOUSAND VALUES (40,'forty') INSERT INTO THOUSAND VALUES (50,'fifty') INSERT INTO THOUSAND VALUES (60,'sixty') INSERT INTO THOUSAND VALUES (70,'seventy') INSERT INTO THOUSAND VALUES (80,'eighty') INSERT INTO THOUSAND VALUES (90,'ninety') INSERT INTO THOUSAND SELECT A.num+B.num, A.wrd+'-'+B.wrd FROM (SELECT * FROM THOUSAND WHERE num BETWEEN 20 AND 90) A CROSS JOIN (SELECT * FROM THOUSAND WHERE num BETWEEN 1 AND 9) B INSERT INTO THOUSAND SELECT A.num*100+B.num, RTRIM(A.wrd+' '+'hundred '+B.wrd) FROM (SELECT * FROM THOUSAND WHERE num BETWEEN 1 AND 9) A CROSS JOIN THOUSAND B GO CREATE FUNCTION NameNum ( @n decimal(15,0) ) returns varchar(400) as begin if @n = 0 return 'zero' declare @s varchar(15) set @s = right(replicate('0',15)+cast(@n as varchar(15)),15) declare @w varchar(400) set @w = '' if left(@s,3) > 0 set @w = @w + (select wrd from thousand where num=left(@s,3)) + ' trillion ' if left(right(@s,12),3) > 0 set @w = @w + (select wrd from thousand where num=left(right(@s,12),3)) + ' billion ' if left(right(@s,9),3) > 0 set @w = @w + (select wrd from thousand where num=left(right(@s,9),3)) + ' million ' if left(right(@s,6),3) > 0 set @w = @w + (select wrd from thousand where num=left(right(@s,6),3)) + ' thousand ' if right(@s,3) > 0 set @w = @w + (select wrd from thousand where num=right(@s,3)) return rtrim(@w) end GO CREATE TABLE #John ( n money ) INSERT INTO #John VALUES(14.43) INSERT INTO #John VALUES(14430.00) INSERT INTO #John VALUES(110004.43) INSERT INTO #John VALUES(98765432.114) INSERT INTO #John VALUES($9000009.116) INSERT INTO #John VALUES(90000000.00) INSERT INTO #John VALUES(0.00) INSERT INTO #John VALUES(787878787878787.93) SELECT n, dbo.NameNum(floor(n)) + ' dollars and ' + dbo.NameNum(right(str(n,18,2),2)) + ' cents' as Number from #John go DROP TABLE THOUSAND DROP FUNCTION NameNum DROP TABLE #John