0% found this document useful (0 votes)
410 views6 pages

Function SQL Terbilang Rupiah, Dolar, Umur

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.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
410 views6 pages

Function SQL Terbilang Rupiah, Dolar, Umur

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.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

Welcome to SQL

Function terbilang (rupiah & dolar)


Function terbilang umur

Abdul Gani Putras




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))



INSERT @Below20 (Word) VALUES

( 'Zero'), ('One'),( 'Two' ), ( 'Three'),

( 'Four' ), ( 'Five' ), ( 'Six' ), ( 'Seven' ),

( 'Eight'), ( 'Nine'), ( 'Ten'), ( 'Eleven' ),

( 'Twelve' ), ( 'Thirteen' ), ( 'Fourteen'),

( 'Fifteen' ), ('Sixteen' ), ( 'Seventeen'),

('Eighteen' ), ( 'Nineteen' )

INSERT @Below100 VALUES ('Twenty'), ('Thirty'),('Forty'), ('Fifty'),

('Sixty'), ('Seventy'), ('Eighty'), ('Ninety')



DECLARE @English varchar(1024) =

(
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 '+

dbo.fnMoneyToEnglishNL( @Number % 1000000, @nl)
ELSE ' INVALID INPUT' END
)

if (@Money - @Number)=''
begin
select @English = RTRIM(@English)
select @English = RTRIM(LEFT(@English,len(@English)-1))
where RIGHT(@English,1)='-'
end
else if (@@NestLevel - @nl) = 1
begin
select @English = @English+' Dollars and '
select @English = @English+
convert(varchar,convert(int,100*(@Money - @Number))) +' Cents'
end
RETURN (@English)


END

/*SELECT NumberInEnglish=dbo.fnMoneyToEnglish ( 67)

-- Sixty-Seven Dollars and 0 Cents

SELECT NumberInEnglish=dbo.fnMoneyToEnglish ( 947.54)

-- Nine Hundred Forty-Seven Dollars and 54 Cents

SELECT NumberInEnglish=dbo.fnMoneyToEnglish ( 1266.04)

-- One Thousand Two Hundred Sixty-Six Dollars and 4 Cents

SELECT NumberInEnglish=dbo.fnMoneyToEnglish ( 4261.25)

-- Four Thousand Two Hundred Sixty-One Dollars and 25 Cents

SELECT NumberInEnglish=dbo.fnMoneyToEnglish ( 921456321.88)*/


CREATE FUNCTION [dbo].[fnMoneyToEnglish](@Money AS money)
RETURNS VARCHAR(1024)
AS
BEGIN
RETURN (dbo.fnMoneyToEnglishNL(@Money, @@NESTLEVEL))
END



CREATE FUNCTION [dbo].[fnGetYearMonthDay](@date AS datetime,@enddate as datetime)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @tmpdate datetime, @years int, @months int, @days int
SELECT @date = @date
SELECT @enddate = GETDATE()
SELECT @tmpdate = @date

SELECT @years = DATEDIFF(yy, @tmpdate, @enddate) - CASE WHEN (MONTH(@date) > MONTH(@enddate)) OR (MONTH(@date) =
MONTH(@enddate) AND DAY(@date) > DAY(@enddate)) THEN 1 ELSE 0 END
SELECT @tmpdate = DATEADD(yy, @years, @tmpdate)
SELECT @months = DATEDIFF(m, @tmpdate, @enddate) - CASE WHEN DAY(@date) > DAY(@enddate) THEN 1 ELSE 0 END
SELECT @tmpdate = DATEADD(m, @months, @tmpdate)
SELECT @days = DATEDIFF(d, @tmpdate, @enddate)

RETURN convert(varchar(max),@years) +' Tahun '+ convert(varchar(max),@months) +' Bulan '+ convert(varchar(max),@days) +' Hari'
END

You might also like