-- Name: Parayı/Rakamı yazıya çeviren SQL function
-- Description:
--sayısal değeri yazıya çevirir
--virgülden sonra 2 haneyi alır
--Eğer @isMoney = true ise dönüş değerine TL ve kuruş eklenir
create function dbo.fnc_ParayiYaziyaCevir (@num AS numeric(18,2), @isMoney as bit)
returns varchar(255)
AS
BEGIN
--declare @num numeric(18,2)
--declare @isMoney bit
--set @num = 1001111.99
--set @isMoney = 1
DECLARE @Split tinyint
DECLARE @iSplit tinyint
DECLARE @sNum varchar(20)
DECLARE @NumSet varchar(3)
DECLARE @Char char(1)
DECLARE @NumText varchar(255)
DECLARE @SetText varchar(100)
DECLARE @HunText varchar(100)
DECLARE @CharText varchar(50)
DECLARE @Match bit
DECLARE @Point tinyint
DECLARE @Cents varchar(2)
DECLARE @CentText varchar(100)
DECLARE @NumStrings TABLE (Num int, NumStr varchar(20))
INSERT INTO @NumStrings
SELECT 1, 'Bir'
UNION SELECT 2, 'İki'
UNION SELECT 3, 'Üç'
UNION SELECT 4, 'Dört'
UNION SELECT 5, 'Beş'
UNION SELECT 6, 'Altı'
UNION SELECT 7, 'Yedi'
UNION SELECT 8, 'Sekiz'
UNION SELECT 9, 'Dokuz'
UNION SELECT 10, 'On'
UNION SELECT 11, 'Onbir'
UNION SELECT 12, 'Oniki'
UNION SELECT 13, 'Onüç'
UNION SELECT 14, 'Ondört'
UNION SELECT 15, 'Onbeş'
UNION SELECT 16, 'Onaltı'
UNION SELECT 17, 'Onyedi'
UNION SELECT 18, 'Onsekiz'
UNION SELECT 19, 'Ondokuz'
UNION SELECT 20, 'Yirmi'
UNION SELECT 30, 'Otuz'
UNION SELECT 40, 'Kırk'
UNION SELECT 50, 'Elli'
UNION SELECT 60, 'Altmış'
UNION SELECT 70, 'Yetmiş'
UNION SELECT 80, 'Seksen'
UNION SELECT 90, 'Doksan'
SET @sNum = cast(@num as varchar(20))
--convert any cent text first, then the
-- whole number
SET @Point = charindex('.', @sNum)
IF @Point > 0
BEGIN
SET @Cents = substring(@sNum, @Point + 1, 2)
SET @sNum = left(@sNum, @Point-1)
--if isMoney THEN combine the two digits (eg 11 = eleven)
IF @isMoney = 1
BEGIN --look FOR matches WITH the RIGHT İki characters
SET @Match = (select count(*) FROM @NumStrings WHERE Num = @Cents)
IF @Match <> 0
BEGIN
SET @CentText = (select NumStr FROM @NumStrings WHERE Num = @Cents)
END
ELSE
BEGIN
SET @CentText = isnull((select NumStr FROM @NumStrings WHERE Num = left(@Cents, 1) + '0'),'') + (select NumStr from @NumStrings where Num = right(@Cents, 1))
END
END
ELSE --if NOT isMBiry THEN treat each digit seperately (eg 11 = Bir Bir)
BEGIN
SET @CentText = isnull((select NumStr FROM @NumStrings WHERE Num = left(@Cents, 1)),'') + isnull((select NumStr from @NumStrings where Num = right(@Cents, 1)),'')
END
END
IF @CentText IS NULL
SET @CentText = ''
--break the number into blocks of 3 characters
SET @Split = ((len(@sNum)-1) / 3) + 1
SET @iSplit = 0
SET @NumText = ''
WHILE @iSplit < @Split
BEGIN
SET @CharText = ''
SET @HunText = ''
SET @SetText = ''
SET @NumSet = right(left(@sNum, len(@sNum) - @iSplit * 3), 3)
IF len(@Numset) = 3 --Calculate ANY hundreds
BEGIN
SET @Char = left(@NumSet, 1)
if @Char='1'
SET @HunText = 'Yüz'
ELSE
SET @HunText = isnull((select NumStr FROM @NumStrings WHERE Num = @Char) + 'Yüz', '')
SET @SetText = @HunText
END
--look FOR matches WITH the RIGHT two characters
SET @Match = (select count(*) FROM @NumStrings WHERE Num = right(@NumSet, 2))
IF @Match <> 0
BEGIN
SET @CharText = (select NumStr FROM @NumStrings WHERE Num = right(@NumSet, 2))
END
ELSE
BEGIN
SET @CharText = isnull((select NumStr FROM @NumStrings WHERE Num = left(right(@NumSet, 2), 1) + '0'),'') + (select NumStr from @NumStrings where Num = right(@NumSet, 1))
END
--make sure there IS something in @CharText AND @SetText (ie IF @NumSet = x00, x000)
IF @CharText IS NULL SET @CharText = ''
IF @SetText IS NULL set @SetText = ''
--seperate ANY hundreds FROM Ons/units WITH an 'and'
IF @HunText <> '' AND @CharText <> ''
SET @SetText = @SetText + ''
--if there are no hundreds, it's the smallest SET AND there are other sets, ADD an 'and' before
IF @HunText = '' AND @CharText <> '' and @iSplit = 0 and @Split > 1 and @CentText = ''
SET @SetText = '' + @SetText
SET @SetText = @SetText + @CharText
--append the SET suffix text. ADD a ',' AS long as there IS something in the lowest set
if @iSplit = 1 AND @SetText='Bir' BEGIN
SET @SetText=''
SET @SetText = @SetText + CASE @iSplit
WHEN 0 THEN ''
WHEN 1 THEN 'Bin'
WHEN 2 THEN 'Milyon'
WHEN 3 THEN 'Milyar'
WHEN 4 THEN 'Trilyon'
WHEN 5 THEN 'Katrilyon'
END + CASE WHEN len(@NumText) > 0 THEN '' ELSE '' end
END
ELSE
BEGIN
IF @SetText <> ''
SET @SetText = @SetText + CASE @iSplit
WHEN 0 THEN ''
WHEN 1 THEN 'Bin'
WHEN 2 THEN 'Milyon'
WHEN 3 THEN 'Milyar'
WHEN 4 THEN 'Trilyon'
WHEN 5 THEN 'Katrilyon'
END + CASE WHEN len(@NumText) > 0 THEN '' ELSE '' end
END
SET @NumText = @SetText + @NumText
SET @iSplit = @iSplit + 1
END
--add any dollars and cent text
IF @isMoney = 1 AND @NumText <> '' and rtrim(ltrim(@NumText)) <> 'Bir'
SET @NumText = @NumText + ' TL'
IF @isMoney = 1 AND rtrim(ltrim(@NumText)) = 'Bir'
SET @NumText = @NumText + ' TL'
IF @isMoney = 1 AND @CentText <> '' and rtrim(ltrim(@CentText)) <> 'Bir'
SET @CentText = @CentText + ' kuruş'
IF @isMoney = 1 AND rtrim(ltrim(@CentText)) = 'Bir'
SET @CentText = @CentText + ' kuruş'
IF @isMoney = 0 AND @CentText <> ''
SET @CentText = ' Point' + @CentText
IF @isMoney = 1 AND @NumText <> '' and @CentText <> ''
SET @CentText = ' ' + @CentText
--combine dollars and cents
SET @NumText = @NumText + @CentText
--add 'Minus' for negative numbers
IF left(@sNum, 1) = '-'
SET @NumText = 'virgül' + @NumText
RETURN @NumText
END
Kaydol:
Kayıt Yorumları (Atom)
BlackListIP control on Serenity platform (.NET Core)
In the Serenity platform, if you want to block IPs that belong to people you do not want to come from outside in the .net core web project,...
-
In the Serenity platform, if you want to block IPs that belong to people you do not want to come from outside in the .net core web project,...
-
TABLO ADI AÇIKLAMA L_PERSONEL Çalışma Alanı Tanımları L_SYSLOG Kullanıcı Kaydı İzleme L_L...
-
Microsoft OLE DB Provider for SQL Server : Cannot create a row of size 8100 which is greater than the allowable maximum of 8060. (80040E14) ...
10 yorum:
s.a hocam , bu functionu asp.nette nasıl kullanabiliriz. ?
yardımcı olursan sevinirim.
Kodlar için çok teşekkür ederim.. Ancak bu kadar işime yarabilirdi :)
SQL DE ÇALIŞMADI HOCAM ACABA NE YANLIŞ YAPTIM?
SQL DE ÇALIŞMADI HOCAM ACABA NE HATA YAPTIM?
sql scripti olarak:
select dbo.fnc_ParayiYaziyaCevir(1525,0)
Sonuç:
BinBeşYüzYirmiBeş
Öncelikle kod için çok teşekkürler eline emeğine sağlık. Ancak bir iki ufak sıkıntı var; sanırım kuruş olayı çalışmıyor birde virgülden sonra çift sıfır olduğu zaman para olarak algılamıyor. (Örnek: 15,00)
BU KADAR KARMAŞAYA GEREK YOK
ALIN
ALTER FUNCTION [dbo].[NUMBERTOTEXT](@NUMBER DECIMAL(11,2))
RETURNS NVARCHAR(1000)
AS
BEGIN
DECLARE @RETURNVAL NVARCHAR(1000)
DECLARE @NUMBERTAM NVARCHAR(20)
DECLARE @NUMBERKUSUR NVARCHAR(5)
DECLARE @RAKAMLAR TABLE (ID INT IDENTITY(0,1), RAKAM INT, LOGIC INT, NAME NVARCHAR(10))
-- Rakamları dolduralım
-- Önce Birler hanesi
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (0,1,'Sıfır')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (1,1,'Bir')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (2,1,'İki')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (3,1,'Üç')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (4,1,'Dört')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (5,1,'Beş')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (6,1,'Altı')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (7,1,'Yedi')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (8,1,'Sekiz')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (9,1,'Dokuz')
-- Sonra onları dolduralım
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (0,2,'')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (1,2,'On')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (2,2,'Yirmi')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (3,2,'Otuz')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (4,2,'Kırk')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (5,2,'Elli')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (6,2,'Altmış')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (7,2,'Yetmiş')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (8,2,'Seksen')
INSERT INTO @RAKAMLAR (RAKAM,LOGIC,NAME) VALUES (9,2,'Doksan')
SET @NUMBERTAM = SUBSTRING(CAST(@NUMBER AS NVARCHAR(30)),1,LEN(@NUMBER)-3)
SET @NUMBERKUSUR = SUBSTRING(CAST(@NUMBER AS NVARCHAR(30)),LEN(@NUMBER)-1,2)
SET @RETURNVAL = ''
IF SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM),1) <> '0'
SET @RETURNVAL = (SELECT NAME FROM @RAKAMLAR WHERE LOGIC = 1 AND RAKAM = SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM),1)) + ''
IF LEN(@NUMBERTAM)> 1
IF SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-1,1) <> '0'
SET @RETURNVAL = (SELECT NAME FROM @RAKAMLAR WHERE LOGIC = 2 AND RAKAM = SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-1,1)) + '' + @RETURNVAL
IF LEN(@NUMBERTAM)> 2
IF SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-2,1) <> '0'
IF SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-2,1) = '1'
SET @RETURNVAL = 'Yüz' + @RETURNVAL
ELSE
SET @RETURNVAL = (SELECT NAME FROM @RAKAMLAR WHERE LOGIC = 1 AND RAKAM = SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-2,1)) + 'Yüz' + @RETURNVAL
IF LEN(@NUMBERTAM)> 3
IF SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-3,1) = '0'
SET @RETURNVAL = 'Bin' + @RETURNVAL
ELSE
IF SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-3,1) = '1'
IF LEN(@NUMBERTAM)>4 AND SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-5,3) <> '001'
SET @RETURNVAL = 'BirBin' + @RETURNVAL
ELSE
SET @RETURNVAL = 'Bin' + @RETURNVAL
ELSE
SET @RETURNVAL = (SELECT NAME FROM @RAKAMLAR WHERE LOGIC = 1 AND RAKAM = SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-3,1)) + 'Bin' + @RETURNVAL
IF LEN(@NUMBERTAM)> 4
IF SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-4,1) <> '0'
SET @RETURNVAL = (SELECT NAME FROM @RAKAMLAR WHERE LOGIC = 2 AND RAKAM = SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-4,1)) + '' + @RETURNVAL
IF LEN(@NUMBERTAM)> 5
IF SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-5,1) <> '0'
IF SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-5,1) = '1'
SET @RETURNVAL = 'Yüz' + @RETURNVAL
ELSE
SET @RETURNVAL = (SELECT NAME FROM @RAKAMLAR WHERE LOGIC = 1 AND RAKAM = SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-5,1)) + 'Yüz' + @RETURNVAL
IF SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-5,3)='000'
SET @RETURNVAL = REPLACE(@RETURNVAL,'Bin','')
IF LEN(@NUMBERTAM)> 6
IF SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-6,1) = '0'
SET @RETURNVAL = 'Milyon' + @RETURNVAL
ELSE
IF SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-6,1) = '1' AND LEN(@NUMBERTAM)>7
SET @RETURNVAL = 'BirMilyon' + @RETURNVAL
ELSE
SET @RETURNVAL = (SELECT NAME FROM @RAKAMLAR WHERE LOGIC = 1 AND RAKAM = SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-6,1)) + 'Milyon' + @RETURNVAL
IF LEN(@NUMBERTAM)> 7
IF SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-7,1) <> '0'
SET @RETURNVAL = (SELECT NAME FROM @RAKAMLAR WHERE LOGIC = 2 AND RAKAM = SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-7,1)) + '' + @RETURNVAL
IF LEN(@NUMBERTAM)> 8
IF SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-8,1) <> '0'
IF SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-8,1) = '1'
SET @RETURNVAL = 'Yüz' + @RETURNVAL
ELSE
SET @RETURNVAL = (SELECT NAME FROM @RAKAMLAR WHERE LOGIC = 1 AND RAKAM = SUBSTRING(@NUMBERTAM,LEN(@NUMBERTAM)-8,1)) + 'Yüz' + @RETURNVAL
SET @RETURNVAL = @RETURNVAL + ' TL '
-- Küsürler
IF LEN(@NUMBERKUSUR)> 1
IF SUBSTRING(@NUMBERKUSUR,LEN(@NUMBERKUSUR)-1,1) <> '0'
SET @RETURNVAL = @RETURNVAL + (SELECT NAME FROM @RAKAMLAR WHERE LOGIC = 2 AND RAKAM = SUBSTRING(@NUMBERKUSUR,LEN(@NUMBERKUSUR)-1,1))
IF SUBSTRING(@NUMBERKUSUR,LEN(@NUMBERKUSUR),1) <> '0'
SET @RETURNVAL = @RETURNVAL + '' + (SELECT NAME FROM @RAKAMLAR WHERE LOGIC = 1 AND RAKAM = SUBSTRING(@NUMBERKUSUR,LEN(@NUMBERKUSUR),1))
IF @NUMBERKUSUR <> '00'
SET @RETURNVAL = @RETURNVAL + ' Krş '
RETURN @RETURNVAL
END
GO
teşekkürler kullandım.
Rica ederim Özer, iyi çalışmalar
Yorum Gönder