Guest User

Untitled

a guest
Feb 21st, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.84 KB | None | 0 0
  1. CREATE FUNCTION [dbo].[fnNumberToEnglish](@Money AS money)
  2. RETURNS VARCHAR(1024)
  3. AS
  4.  
  5. BEGIN
  6.  
  7. DECLARE @Number as BIGINT
  8.  
  9. SET @Number = FLOOR(@Money)
  10.  
  11. DECLARE @Below20 TABLE (ID int identity(0,1), Word varchar(32))
  12.  
  13. DECLARE @Below100 TABLE (ID int identity(2,1), Word varchar(32))
  14.  
  15. INSERT @Below20 (Word) VALUES
  16.  
  17. ( 'Zero'), ('One'),( 'Two' ), ( 'Three'),
  18.  
  19. ( 'Four' ), ( 'Five' ), ( 'Six' ), ( 'Seven' ),
  20.  
  21. ( 'Eight'), ( 'Nine'), ( 'Ten'), ( 'Eleven' ),
  22.  
  23. ( 'Twelve' ), ( 'Thirteen' ), ( 'Fourteen'),
  24.  
  25. ( 'Fifteen' ), ('Sixteen' ), ( 'Seventeen'),
  26.  
  27. ('Eighteen' ), ( 'Nineteen' )
  28.  
  29. INSERT @Below100 VALUES ('Twenty'), ('Thirty'),('Forty'), ('Fifty'),
  30.  
  31. ('Sixty'), ('Seventy'), ('Eighty'), ('Ninety')
  32.  
  33. DECLARE @English varchar(1024) =
  34. (
  35. SELECT Case
  36. WHEN @Number = 0 THEN ''
  37. WHEN @Number BETWEEN 1 AND 19
  38. THEN (SELECT Word FROM @Below20 WHERE ID=@Number)
  39. WHEN @Number BETWEEN 20 AND 99
  40. -- SQL Server recursive function
  41.  
  42. THEN (SELECT Word FROM @Below100 WHERE ID=@Number/10)+ '-' +
  43. dbo.fnMoneyToEnglish( @Number % 10)
  44. WHEN @Number BETWEEN 100 AND 999
  45. THEN (dbo.fnMoneyToEnglish( @Number / 100))+' Hundred '+
  46.  
  47. dbo.fnMoneyToEnglish( @Number % 100)
  48.  
  49. WHEN @Number BETWEEN 1000 AND 999999
  50. THEN (dbo.fnMoneyToEnglish( @Number / 1000))+' Thousand '+
  51. dbo.fnMoneyToEnglish( @Number % 1000)
  52. WHEN @Number BETWEEN 1000000 AND 999999999
  53. THEN (dbo.fnMoneyToEnglish( @Number / 1000000))+' Million '+
  54. dbo.fnMoneyToEnglish( @Number % 1000000)
  55.  
  56. ELSE ' INVALID INPUT' END
  57.  
  58. )
  59.  
  60. SELECT @English = RTRIM(@English)
  61.  
  62. SELECT @English = RTRIM(LEFT(@English,len(@English)-1))
  63. WHERE RIGHT(@English,1)='-'
  64.  
  65. IF @@NestLevel = 1
  66. BEGIN
  67.  
  68. SELECT @English = @English+' POINT '
  69.  
  70. SELECT @English = @English+
  71.  
  72. convert(varchar,convert(int,100*(@Money - @Number)))
  73.  
  74. END
  75.  
  76. RETURN (@English)
  77.  
  78. END
Add Comment
Please, Sign In to add comment