Você está na página 1de 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

Você também pode gostar