Çoğu faturaların, çeklerin, senetlerin vb tutarlarının yanında yazı ile yaılmaları gerekmektedir. Son günlerde duyduğum bir ihtiyaçtan dolayı bu çeviri işlemini MySQL veritabanı üzerinde sorgu esnasında yapmak durumunda kaldım. Şimdi bu kodu sizlerle paylaşıyorum: MYSQL CREATE DEFINER = 'adminuser'@'%' FUNCTION `number_to_string`(
n DOUBLE(15,2)
)
RETURNS varchar(100) CHARSET latin5
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE ans varchar(2000);
DECLARE dig1, dig2, dig3 VARCHAR(20);
DECLARE uclukler, ucluklerTers int;
DECLARE tam, ondalik CHAR(30);
DECLARE strNum CHAR(3);
DECLARE strNumKalan CHAR(30);
DECLARE ind int;
SET uclukler = 0;
SET ucluklerTers = 0;
SET ans = '';
SET strNumKalan = '';
-- Tam Ondalık kısmı alır
SET strNumKalan = CAST(n AS CHAR(30));
SET strNumKalan = REPLACE(strNumKalan, ',', '.');
SET ondalik = SUBSTRING_INDEX(strNumKalan,'.',-1);
SET tam = SUBSTRING_INDEX(strNumKalan,'.',1);
-- Tam kısımda kaçtane 3 lü parça var
WHILE FLOOR(tam/ POW(1000, uclukler)) > 0 DO
SET uclukler = uclukler +1;
END WHILE;
SET strNumKalan = tam;
-- Tam kısım parçalanması
WHILE (uclukler > 0) DO
-- Kelimelere dokulcek kısmı ayır
IF(ucluklerTers = 0) THEN
Set ind = LENGTH(strNumKalan)%3;
IF(ind = 0) THEN
SET ind = 3;
END IF;
SET strNum = SUBSTRING(strNumKalan, 1, ind);
SET strNumKalan = CONCAT('', SUBSTRING(strNumKalan, LENGTH(strNum)%3 +1));
ELSE
SET strNum = SUBSTRING(strNumKalan, 1, 3);
SET strNumKalan = CONCAT('', SUBSTRING(strNumKalan, 4));
END IF;
SET uclukler = uclukler -1;
SET ucluklerTers = ucluklerTers +1;
-- 100luk 10luk 1lik kısımları al
IF (LENGTH(strNum) = 3) THEN
SET dig3 = SUBSTRING(strNum, 1, 1);
SET dig2 = SUBSTRING(strNum, 2, 1);
SET dig1 = SUBSTRING(strNum, 3, 1);
ELSEIF(LENGTH(strNum) = 2) then
SET dig3 = '0';
SET dig2 = SUBSTRING(strNum, 1, 1);
SET dig1 = SUBSTRING(strNum, 2, 1);
ELSE
SET dig3 = '0';
SET dig2 = '0';
SET dig1 = SUBSTRING(strNum, 1, 1);
END IF;
-- Cümleye dök
IF NOT(dig3 = '0' AND dig2 = '0' AND dig1 = '1' AND uclukler = 1) THEN
IF dig3 <> '0' THEN
CASE
WHEN dig3='1' THEN SET ans=CONCAT(ans, 'Yüz');
WHEN dig3='2' THEN SET ans=CONCAT(ans, 'İkiyüz');
WHEN dig3='3' THEN SET ans=CONCAT(ans, 'Üçyüz');
WHEN dig3='4' THEN SET ans=CONCAT(ans, 'Dörtyüz');
WHEN dig3='5' THEN SET ans=CONCAT(ans, 'Beşyüz');
WHEN dig3='6' THEN SET ans=CONCAT(ans, 'Altıyüz');
WHEN dig3='7' THEN SET ans=CONCAT(ans, 'Yediyüz');
WHEN dig3='8' THEN SET ans=CONCAT(ans, 'Sekizyüz');
WHEN dig3='9' THEN SET ans=CONCAT(ans, 'Dokuzyüz');
ELSE SET ans = ans;
END CASE;
END IF;
IF dig2 <> '0' THEN
CASE
WHEN dig2='1' THEN SET ans=CONCAT(ans, 'On');
WHEN dig2='2' THEN SET ans=CONCAT(ans, 'Yirmi');
WHEN dig2='3' THEN SET ans=CONCAT(ans, 'Otuz');
WHEN dig2='4' THEN SET ans=CONCAT(ans, 'Kırk');
WHEN dig2='5' THEN SET ans=CONCAT(ans, 'Elli');
WHEN dig2='6' THEN SET ans=CONCAT(ans, 'Altmış');
WHEN dig2='7' THEN SET ans=CONCAT(ans, 'Yetmiş');
WHEN dig2='8' THEN SET ans=CONCAT(ans, 'seksen');
WHEN dig2='9' THEN SET ans=CONCAT(ans, 'Doksan');
ELSE SET ans=ans;
END CASE;
END IF;
IF dig1 <> '0' THEN
CASE
WHEN dig1='1' THEN SET ans=CONCAT(ans, 'Bir');
WHEN dig1='2' THEN SET ans=CONCAT(ans, 'İki');
WHEN dig1='3' THEN SET ans=CONCAT(ans, 'Üç');
WHEN dig1='4' THEN SET ans=CONCAT(ans, 'Dört');
WHEN dig1='5' THEN SET ans=CONCAT(ans, 'Beş');
WHEN dig1='6' THEN SET ans=CONCAT(ans, 'Altı');
WHEN dig1='7' THEN SET ans=CONCAT(ans, 'Yedi');
WHEN dig1='8' THEN SET ans=CONCAT(ans, 'Sekiz');
WHEN dig1='9' THEN SET ans=CONCAT(ans, 'Dokuz');
ELSE SET ans=ans;
END CASE;
END IF;
END IF;
IF(dig3 <> '0' OR dig2 <> '0' OR dig1 <> '0' ) THEN
CASE
WHEN uclukler = 2 THEN SET ans=CONCAT(ans, 'Milyon');
WHEN uclukler = 1 THEN SET ans=CONCAT(ans, 'Bin');
ELSE SET ans=ans;
END CASE;
END IF;
END WHILE;
IF(ans<>'') THEN
SET ans=CONCAT(ans, 'Lira');
END IF;
-- Kurus kısmı
IF(LENGTH(ondalik) = 1) THEN
SET dig2 = '0';
SET dig1 = SUBSTRING(ondalik, 1, 1);
ELSE
SET dig2 = SUBSTRING(ondalik, 1, 1);
SET dig1 = SUBSTRING(ondalik, 2, 1);
END IF;
IF dig2 <> '0' THEN
CASE
WHEN dig2='1' THEN SET ans=CONCAT(ans, 'On');
WHEN dig2='2' THEN SET ans=CONCAT(ans, 'Yirmi');
WHEN dig2='3' THEN SET ans=CONCAT(ans, 'Otuz');
WHEN dig2='4' THEN SET ans=CONCAT(ans, 'Kırk');
WHEN dig2='5' THEN SET ans=CONCAT(ans, 'Elli');
WHEN dig2='6' THEN SET ans=CONCAT(ans, 'Altmış');
WHEN dig2='7' THEN SET ans=CONCAT(ans, 'Yetmiş');
WHEN dig2='8' THEN SET ans=CONCAT(ans, 'Seksen');
WHEN dig2='9' THEN SET ans=CONCAT(ans, 'Doksan');
ELSE SET ans=ans;
END CASE;
END IF;
IF dig1 <> '0' THENn
CASE
WHEN dig1='1' THEN SET ans=CONCAT(ans, 'Bir');
WHEN dig1='2' THEN SET ans=CONCAT(ans, 'İki');
WHEN dig1='3' THEN SET ans=CONCAT(ans, 'Üç');
WHEN dig1='4' THEN SET ans=CONCAT(ans, 'Dört');
WHEN dig1='5' THEN SET ans=CONCAT(ans, 'Beş');
WHEN dig1='6' THEN SET ans=CONCAT(ans, 'Altı');
WHEN dig1='7' THEN SET ans=CONCAT(ans, 'Yedi');
WHEN dig1='8' THEN SET ans=CONCAT(ans, 'Sekiz');
WHEN dig1='9' THEN SET ans=CONCAT(ans, 'Dokuz');
ELSE SET ans=ans;
END CASE;
END IF;
IF(dig2 <> '0' OR dig1 <> '0' ) THEN
SET ans=CONCAT(ans, 'Kurus');
END IF;
RETURN TRIM(ans);
END;
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<title></title>
<script type="text/javascript">
function cevir(){
var el=document.getElementById('inp1');
var el2=document.getElementById('inp2');
if(el.value.length==1 && el.value==0) return el2.value="sıfır";
var basamak=[
[0,"","","","bin",""],
[1,"bir","on","yüz","bin","on"],
[2,"iki","yirmi","iki yüz","iki bin","yirmi"],
[3,"üç","otuz","üç yüz","üç bin","otuz"],
[4,"dört","kırk","dört yüz","dört bin","kırk"],
[5,"beş","elli","beş yüz","beş bin","elli"],
[6,"altı","altmış","altı yüz","altı bin","altmış"],
[7,"yedi","yetmiş","yedi yüz","yedi bin","yetmiş"],
[8,"sekiz","seksen","sekiz yüz","sekiz bin","seksen"],
[9,"dokuz","doksan","dokuz yüz","dokuz bin","doksan"]
];
var arr=[];
for(var n=0, b=el.value.length; n<el.value.length; n++,b--) {
for(var i=0; i<10; i++) {
if(el.value.charAt(n)==basamak[i][0]) arr[arr.length]=basamak[i][b];
}
}
el2.value=arr.join(" ");
}
</script>
</head>
<body>
<input type="text" id="inp1" value="">
<input type="button" value="yazıya çevir" onclick="cevir()" >
<input type="text" id="inp2" >
</body>
</html>
(Kaynak: http://forum.ceviz.net/javascript-dhtml-ajax/57534-sayiyi-yaziya-cevirme.html)
ORACLE
CREATE OR REPLACE FUNCTION spell_number (p_number IN NUMBER)
RETURN VARCHAR2
AS
TYPE myArray IS TABLE OF VARCHAR2 (255);
l_str myArray
:= myArray ('',
' thousand ',
' million ',
' billion ',
' trillion ',
' quadrillion ',
' quintillion ',
' sextillion ',
' septillion ',
' octillion ',
' nonillion ',
' decillion ',
' undecillion ',
' duodecillion ');
l_num VARCHAR2 (50) DEFAULT TRUNC (p_number);
l_return VARCHAR2 (4000);
BEGIN
FOR i IN 1 .. l_str.COUNT
LOOP
EXIT WHEN l_num IS NULL;
IF (SUBSTR (l_num, LENGTH (l_num) - 2, 3) <> 0)
THEN
l_return :=
TO_CHAR (TO_DATE (SUBSTR (l_num, LENGTH (l_num) - 2, 3), 'J'),
'Jsp')
|| l_str (i)
|| l_return;
END IF;
l_num := SUBSTR (l_num, 1, LENGTH (l_num) - 3);
END LOOP;
RETURN l_return;
END;
/
SELECT spell_number (53734555555585) FROM DUAL;
(Kaynak: http://viralpatel.net/blogs/convert-number-into-words-oracle-sql-query/)
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
d7d73e91-7d12-4107-af3a-5b3456b06517|9|4.2|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Tags: convert number to words, mysql fonksiyon |
Categories: SQL | HTML | Javascript | Oracle