Fungsi Terbilang di SQL Server

5 03 2007

Kemaren dapet kasus untuk menampilkan terbilang dalam bahasa indonesia di Crystal Report. klo reportnya hanya 1 halaman, bisa dengan cara diproses di vb dulu, baru di lempar ke parameter field di CR. untuk report yg lebih dari 1 halaman, dan masing2x halaman mewakili record yg berbeda, terbilangnya tidak bisa di lewatkan parameter field, sebab, klo dilewatkan parameter field, antara halaman 1 dengan yg lain, terbilangnya akan sama, walaupun nilai rupiah nya berbeda.
untuk mengatasi hal tersebut, akhirnya dibuat saja fungsi terbilang di sql server. sehingga terbilangnya akan muncul di query nya.
Fungsi terbilang ini dibuat oleh mas Arif Hidayat.

CREATE FUNCTION [DBO].[TerbilangDetil] (@Nilai as decimal) 
RETURNS varchar(200) AS 
BEGIN
declare @TS varchar(200), @ST varchar(200), @S integer, @p integer, @r1 integer, @Bil varchar(200), @TP varchar(200), @hasil varchar(200)
    set @ST = Right(rTrim(Str(@Nilai + 1000)), 3)
    set @S = cast(Right(@ST, 1) as integer)
    set @p = cast(substring(@ST, 2, 1) as integer)
    set @r1 = cast(Left(@ST, 1) as integer)
    set @Bil = ‘Satu    Dua     Tiga    Empat   Lima    ‘
    set @Bil = @Bil + ‘Enam    Tujuh   Delapan Sembilan’
   
    If @S = 0
        set @TS = ”
    Else
        set @TS = rTrim(substring(@Bil, @S * 8 – 7, 8)) + ‘ ‘
       
    If @p = 0
        set @TP = @TS
    Else
        If @p = 1
            If @S = 0
                set @TP = ‘Sepuluh ‘
            Else
                If @S = 1
                    set @TP = ‘Sebelas ‘
                Else
                    set @TP = rTrim(substring(@Bil, @S * 8 – 7, 8)) + ‘ Belas ‘
        Else
            set @TP = rTrim(substring(@Bil, @p * 8 – 7, 8)) + ‘ Puluh ‘ + @TS
       
    If @r1 = 0
        set @hasil = @TP
    Else
        If @r1 = 1
            set @hasil = ‘Seratus ‘ + @TP
        Else
            set @hasil = rTrim(substring(@Bil, @r1 * 8 – 7, 8)) + ‘ Ratus ‘ + @TP
return @hasil
END

CREATE FUNCTION [dbo].[terbilang] (@angka as decimal(19,2)) 
RETURNS varchar (200) AS 
BEGIN
Declare @b Decimal, @r Decimal, @J Decimal, @M Decimal, @T1 Decimal, @koma1 Decimal, @koma2 Integer, @hasil varchar(200)
Declare @s_t varchar(200), @ribu varchar(200), @Juta varchar(200), @Miliar varchar(200), @tx varchar(200), @angka1 varchar(200), @tx1 varchar(200)
set @s_t = case when Len(rTrim(cast(cast(@Angka as bigint) as varchar(20)))) < 15
        then replicate(‘0’,15 – Len(rTrim(cast(cast(@Angka as bigint) as varchar(20))))) + rTrim(cast(cast(@Angka as bigint) as varchar(20)))
        else rTrim(cast(cast(@Angka as bigint) as varchar(20)))
         end
–set @z = cast(15 – Len(rTrim(cast(cast(@Angka as integer) as varchar(20)))) as varchar(20))
–+ rTrim(cast(cast(@Angka as integer) as varchar(20)))
set @r = cast(Right(@s_t, 3) as integer)
set @b = cast(substring(@s_t, 10, 3)  as integer)
set @J = cast(substring(@s_t, 7, 3)  as integer)
set @M = cast(substring(@s_t, 4, 3)  as integer)
set @T1 = cast(Left(@s_t, 3)  as integer)
set @ribu = case when @b = 0 then ‘ ‘ else case when @b = 1 then ‘Seribu’ else [dbo].TerbilangDetil(@b) + ‘Ribu’ end end
set @Juta = case when @J = 0 then ‘ ‘ else [dbo].TerbilangDetil(@J) + ‘Juta ‘ end
set @Miliar = case when @M = 0 then ‘ ‘ else [dbo].TerbilangDetil(@M) + ‘Miliar’ end
set @tx = Case
    when @Angka < 1000 –&& Ratusan
                then [dbo].TerbilangDetil(@r)
        when @Angka < 1000000 –&& Ribuan
                then @ribu + ‘ ‘ + [dbo].TerbilangDetil(@r)
        when @Angka < 1000000000 –&& Jutaan
                then [dbo].TerbilangDetil(@J) + ” + rTrim(‘Juta ‘ + @ribu) + ‘ ‘ + [dbo].TerbilangDetil(@r)
    when @Angka < 1000000000000 –&& Miliaran
                then [dbo].TerbilangDetil(@M) + ” + rTrim(‘Miliar ‘ + @Juta + @ribu) + ‘ ‘ + [dbo].TerbilangDetil(@r)
        when @Angka >= 1000000000000 –&& Trilliun
                then [dbo].TerbilangDetil(@T1) + ” + rTrim(‘Trilliun ‘ + @Miliar + @Juta + @ribu) + ‘ ‘ + [dbo].TerbilangDetil(@r)
End
set @angka1 = rTrim(cast(@Angka as varchar(20)))
set @koma1 = case when charindex(‘.’, @angka1) = 0 then 0 else cast(rTrim(substring(@angka1, charindex(‘.’,@angka1) + 1, 2)) as integer) end
set @koma2 = Len(case when charindex(‘.’,@angka1) = 0 then ‘0’ else rTrim(substring(@angka1, charindex(‘.’,@angka1) + 1, 2)) end)
If @koma1 > 0
begin
    If @koma1 < 10 And @koma2 = 1
    set @koma1 = @koma1 * 10
    set @tx1 = [dbo].TerbilangDetil(@koma1)
    set @hasil = @tx + ‘Rupiah ‘ + @tx1 + ‘Sen’
end
Else
    set @hasil = @tx + ‘Rupiah’
return (@hasil)
END

powered by performancing firefox

Advertisements

Actions

Information

15 responses

16 04 2007
andi eko

Penerapannya bagaimana yah, maap gak pernah buat fungsi di sql server.
kok bisa masuk ke query itu gimana yah ..

17 04 2007
change digits number into text on SQL Server 2000 » Read With Me

[…] and example that i want to show you to change digits number into text. This Function belongs to madhi, he make this function to create report with many pages and it can’t be done by creating […]

5 06 2007
Alfian

Apakah Fungsi terbilang ini bisa digunakan bila kita hanya menggunakan MS Access 2003 baik dalam Form / Report, bgmn caranya …terima kasih pak atas bantuannya.

26 07 2007
Brata

Bisa nggak fungsi ini dipake di mysql ? sintaxnya berubah ngga ?

6 11 2007
usmanhariri

kalo buad nampilin terbilang di cr, bisa juga dengan cara buad dll dari fungsi terbilang, kemuadian di register, nanti fungsi terbilang tersebut akan terbaca dari cr-nya. dll nya kalo ga salah harus diawali dengan nama CRLF*.dll, buat lebih jelasnya, cari di mbah google tentang nambahin fungsi di cr.

19 03 2008
Sigit Tegal

Ass. Wr.Wb
Mas .. mo Tanya nich kalo mo buat hasil persen gimana .. ex: 10% dari 1000

tengyu >>

22 07 2009
yono

wah kok pinter banget yg buat ini, kira2 familiar dengan ms acces g y?
q mau tanya2 tentang acces
please balas ke email saya

thx

4 08 2009
puing

@Andi EKO

contoh penerapannya yang mudah seperti ini…

select dbo.terbilang(1992) as terbilang

hasilnya seperti ini
‘Seribu Sembilan Ratus Sembilan Puluh Dua Rupiah’

^_^

28 04 2010
wawa

suwun mas… usefull.. i luv u full..

4 07 2010
anas

Thanks mas…

21 07 2010
yud

om saya blh minta gak scriptnya, tp yang lsg dr sql nya.
yang ini gak bisa, pas di coba errror scriptnya, banyak tanda baca yang berantakan soalnya.
thanks.
ke yudista@gmail.com ea.

13 08 2010
mike

koq tanda — untuk komentar jadi pada ngaco ya?ini copy dari oracle bro?

@yud : g dah solve…& kirim ke mail u

4 11 2010
irul

saya blh minta gak scriptnya, tp yang lsg dr sql nya.
yang ini gak bisa, pas di coba errror scriptnya, banyak tanda baca yang berantakan soalnya.
thanks.

27 02 2013
Taopik Basar

THANKS BROTHER…ITS WORK

21 03 2015
lutfi

bisa gak ya boss di feld query langsung membaca terbilang dari field yang lain missal : field (dg nama “nominal” bernilai1000) di field missal (terbilang: lagsung baca field nominal) …..bagaimana rumsnya boss ……..

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s




%d bloggers like this: