This document contains code for several SQL functions:
- A function to convert a number to its word representation in Indonesian.
- A function to convert a money amount to its word representation in English.
- A function to calculate and return the number of years, months, and days between two date values.
This document contains code for several SQL functions:
- A function to convert a number to its word representation in Indonesian.
- A function to convert a money amount to its word representation in English.
- A function to calculate and return the number of years, months, and days between two date values.
CREATE function [dbo].[terbilang] (@nilai bigint) RETURNS varchar(1024) AS BEGIN DECLARE @hasil varchar(1024),@x bigint
DECLARE @angka TABLE ( kode int, ket varchar(20)) INSERT INTO @angka VALUES(0,'') INSERT INTO @angka VALUES(1,'Satu') INSERT INTO @angka VALUES(2,'Dua') INSERT INTO @angka VALUES(3,'Tiga') INSERT INTO @angka VALUES(4,'Empat') INSERT INTO @angka VALUES(5,'Lima') INSERT INTO @angka VALUES(6,'Enam') INSERT INTO @angka VALUES(7,'Tujuh') INSERT INTO @angka VALUES(8,'Delapan') INSERT INTO @angka VALUES(9,'Sembilan') INSERT INTO @angka VALUES(10,'Sepuluh') INSERT INTO @angka VALUES(11,'Sebelas') IF @nilai <12 SET @hasil = (SELECT ket FROM @angka WHERE kode=@nilai) ELSE IF @nilai <20 BEGIN SET @x = @nilai - 10 SET @hasil = (SELECT ket FROM @angka WHERE kode=@x) + ' Belas' END ELSE IF @nilai <100 BEGIN SET @x = @nilai / 10 SET @hasil = (SELECT ket FROM @angka WHERE kode=@x) + ' Puluh ' SET @x = @nilai % 10 SET @hasil = @hasil + (SELECT ket FROM @angka WHERE kode=@x) END ELSE IF @nilai <200 BEGIN SET @x = @nilai - 100 SET @hasil = 'Seratus ' + dbo.terbilang(@x) END ELSE IF @nilai <1000 BEGIN SET @x = @nilai / 100 SET @hasil = dbo.terbilang(@x) + ' Ratus ' SET @x = @nilai % 100 SET @hasil = @hasil + dbo.terbilang(@x) END ELSE IF @nilai <2000
BEGIN SET @x = @nilai - 1000 SET @hasil = 'Seribu ' + dbo.terbilang(@x) END ELSE IF @nilai <1000000 BEGIN SET @x = @nilai / 1000 SET @hasil = dbo.terbilang(@x) + ' Ribu ' SET @x = @nilai % 1000 SET @hasil = @hasil + dbo.terbilang(@x) END ELSE IF @nilai <1000000000 BEGIN SET @x = @nilai / 1000000 SET @hasil = dbo.terbilang(@x) + ' Juta ' SET @x = @nilai % 1000000 SET @hasil = @hasil + dbo.terbilang(@x) END ELSE IF @nilai <1000000000000 BEGIN SET @x = @nilai / 1000000000 SET @hasil = dbo.terbilang(@x) + ' Milyar ' SET @x = @nilai % 1000000000 SET @hasil = @hasil + dbo.terbilang(@x) END ELSE IF @nilai <1000000000000000 BEGIN SET @x = @nilai / 1000000000000 SET @hasil = dbo.terbilang(@x) + ' Trilyun ' SET @x = @nilai % 1000000000000 SET @hasil = @hasil + dbo.terbilang(@x) END ELSE SET @hasil = 'N/A' RETURN @hasil END
CREATE FUNCTION [dbo].[fnMoneyToEnglishNL](@Money AS money, @nl int)
RETURNS VARCHAR(1024)
AS
BEGIN
DECLARE @Number as BIGINT
SET @Number = FLOOR(@Money)
DECLARE @Below20 TABLE (ID int identity(0,1), Word varchar(32))
DECLARE @Below100 TABLE (ID int identity(2,1), Word varchar(32))
( SELECT Case WHEN @Number = 0 THEN '' WHEN @Number BETWEEN 1 AND 19 THEN (SELECT Word FROM @Below20 WHERE ID=@Number) WHEN @Number BETWEEN 20 AND 99
-- SQL Server recursive function THEN (SELECT Word FROM @Below100 WHERE ID=@Number/10)+ '-' + dbo.fnMoneyToEnglishNL( @Number % 10, @nl) WHEN @Number BETWEEN 100 AND 999 THEN (dbo.fnMoneyToEnglishNL( @Number / 100, @nl))+' Hundred '+ dbo.fnMoneyToEnglishNL( @Number % 100, @nl) WHEN @Number BETWEEN 1000 AND 999999 THEN (dbo.fnMoneyToEnglishNL( @Number / 1000, @nl))+' Thousand '+ dbo.fnMoneyToEnglishNL( @Number % 1000, @nl) WHEN @Number BETWEEN 1000000 AND 999999999 THEN (dbo.fnMoneyToEnglishNL( @Number / 1000000, @nl))+' Million '+