إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

منقول Convert A Number To A String


4 رد (ردود) على هذا الموضوع

#1 عبداللطيف

عبداللطيف

    مــشــرف عــام

  • الإشراف العام
  • 1,267 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 15 March 2004 - 01:30 PM

للفائدة منقوله من تجربة شخص
تحويل الارقام الى حروف

Convert a Number to a String

CREATE OR REPLACE FUNCTION to_words (
m_amount_in IN NUMBER,
m_first_para IN VARCHAR2 := 'Dollars',
m_second_para IN VARCHAR2 := 'Cents'
)
RETURN VARCHAR2
AS m_amount NUMBER := m_amount_in;
word_string VARCHAR2(1000);
lower_number NUMBER;
lower_str VARCHAR2(50);
loop_var NUMBER := 1;
/* Function declarartion to convert into string */
FUNCTION to_string (m_val_in NUMBER)
RETURN CHAR
IS
BEGIN IF m_val_in > 0
THEN
RETURN (INITCAP (TO_CHAR (TO_DATE (m_val_in, 'SSSSS'), 'SSSSSSP')));
ELSE
RETURN ('');
END IF;
END;
/* End of Function */
BEGIN /*-------------- place the parameters at required places --------------*/
lower_number := (m_amount MOD 1) * 100;
/* Check for lower denominations not exceeding two digits */
IF length(lower_number) < 3
THEN
IF m_amount >= 1 and lower_number > 0
THEN lower_str :=
' ' ||
m_first_para ||
' & ' ||
LOWER (to_string (lower_number)) ||
' ' ||
m_second_para;
ELSIF m_amount < 1 and lower_number > 0
THEN lower_str :=
LOWER (to_string (lower_number)) ||
' ' ||
m_second_para;
ELSIF m_amount >= 1 and lower_number = 0
THEN lower_str := ' ' || m_first_para;
END IF;
ELSE
word_string := 'Invalid lower denomination !!' ;
RETURN (word_string);
END IF;
/*---------------- End of placing paramters -------------------------*/

WHILE loop_var = 1
LOOP
IF m_amount > 0 AND m_amount <= 1000
THEN
word_string :=
word_string ||
(INITCAP (to_string (FLOOR (m_amount))) || lower_str);
loop_var := 0;
ELSIF m_amount > 1000 AND m_amount < 1000000
THEN
word_string :=
word_string ||
(INITCAP (to_string (FLOOR (m_amount / 1000))) ||
' Thousand ' ||
to_string (FLOOR (m_amount MOD 1000)) ||
lower_str
);
loop_var := 0;
ELSIF m_amount >= 1000000 AND m_amount < 1000000000
THEN
word_string :=
word_string ||
INITCAP (to_string (FLOOR (m_amount / 1000000))) || ' Million ';
m_amount := FLOOR (m_amount MOD 1000000);
IF m_amount = 0
THEN
loop_var := 0;
word_string := word_string || lower_str;
END IF;
ELSIF m_amount >= 1000000000 AND m_amount <= 999999999999.99
THEN
word_string :=
INITCAP (
to_string (FLOOR (m_amount / 1000000000))) || ' Billion ';
m_amount := FLOOR (m_amount MOD 1000000000);
IF m_amount = 0
THEN
loop_var := 0;
word_string := word_string || lower_str;
END IF;
ELSIF m_amount = 0
THEN
word_string := ('Zero' || lower_str);
loop_var := 0;
ELSE
word_string := 'This is beyond my scope !!';
loop_var := 0;
END IF;
END LOOP;
RETURN (word_string);
END to_words;
/



ويوجد المثال بالملف المرفق


تحياتي

Tofeee


[color=#FF0000]

تمت إضافة الملف مرة أخري
إدارة المنتدي

ملفات مرفقة

  • ملف مرفق  TO_WORDS.txt   2.45كيلو   610 عدد مرات التحميل


#2 Guest_عادل الشهري_*

Guest_عادل الشهري_*
  • الزائرين

تاريخ المشاركة 15 March 2004 - 07:00 PM

الف الف شكر : )


أخوك عادل

#3 aaab77

aaab77

    عضو

  • الأعضــاء
  • 26 مشاركة
  • الاسم الأول:Ali
  • اسم العائلة:Ahmed
  • البـلـد: Country Flag

تاريخ المشاركة 17 March 2004 - 08:49 AM

مشكور على الدالة ولكن لدي جملة تعطيك المطلوب وهي
SQL> select to_char(to_date(112004,'J'), 'JSP') from dual; TO_CHAR(TO_DATE(1191214,'J'),'JSP')
----------------------------------------------------------------
ONE HUNDRED TWELVE THOUSAND FOUR

علي احمد
aaab2000@hotmail.com

#4 وديع القباطي

وديع القباطي

    مشترك

  • الأعضــاء
  • 182 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:للتواصل
    http://www.facebook.com/wadee.alkopaty
    wadee_alkopaty@yahoo.com

تاريخ المشاركة 13 January 2007 - 03:53 PM

hghhg

#5 wlahmad

wlahmad

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 252 مشاركة

تاريخ المشاركة 10 February 2007 - 10:52 PM

شكرا جزيلا لك
فتح الله عليك ونفع بك