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

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

صورة
- - - - -

التفقيط


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

#1 sors

sors

    عضو نشط

  • الأعضــاء
  • 449 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 27 December 2009 - 02:17 PM

انا شوفت الكود اللى من سطر واحد وعجبنى جدا

Select To_char(To_Date('5535','J'),'JSP') As Func
From Dual;

بس ليا سؤال لو الرقم فية كسور يتعمل ازاى برجاء الاهتمام
يعنى بدل 5535
يبقى 5535.11

#2 أحمد جادو

أحمد جادو

    عضو نشط

  • الأعضــاء
  • 244 مشاركة
  • الاسم الأول:أحمد
  • اسم العائلة:جادو
  • البـلـد: Country Flag
  • المنصب الحالي:Senior Oracle Developer @ Alhasa Municipality

تاريخ المشاركة 27 December 2009 - 04:07 PM

هذه الدالة من تصميمي ومعتمدة على هذه الصيغة
FUNCTION only_en (num NUMBER, frc NUMBER, cur VARCHAR2, deca VARCHAR2)
   RETURN VARCHAR2
IS
   x	  VARCHAR2 (200);
   mi	 NUMBER (6);
   nu	 NUMBER (6);
   fk	 NUMBER (6);
   mi_e   VARCHAR2 (100);
   nu_e   VARCHAR2 (100);
   fk_e   VARCHAR2 (100);
   cs	 VARCHAR2 (3);
   cr	 VARCHAR2 (3);
BEGIN
   SELECT TRUNC (num / 1000000)
	 INTO mi
	 FROM DUAL;

   IF mi <> 0
   THEN
	  SELECT	TO_CHAR (TO_DATE (TRUNC (num / 1000000), 'J'), 'jsp')
			 || ' million '
		INTO mi_e
		FROM DUAL;
   END IF;

   SELECT TRUNC (num) - TRUNC (num / 1000000) * 1000000
	 INTO nu
	 FROM DUAL;

   IF nu <> 0
   THEN
	  SELECT TO_CHAR (TO_DATE (TRUNC (num) - TRUNC (num / 1000000) * 1000000,
							   'J'
							  ),
					  'jsp'
					 )
		INTO nu_e
		FROM DUAL;
   END IF;

   SELECT (ROUND (num, frc) - TRUNC (num)) * POWER (10, frc)
	 INTO fk
	 FROM DUAL;

   IF fk <> 0
   THEN
	  SELECT	TO_CHAR (TO_DATE (  (ROUND (num, frc) - TRUNC (num))
								  * POWER (10, frc),
								  'J'
								 ),
						 'jsp'
						)
			 || ' '
			 || deca
		INTO fk_e
		FROM DUAL;
   END IF;

   IF nu_e IS NOT NULL OR mi_e IS NOT NULL
   THEN
	  cr := ' ' || cur;
   END IF;

   IF fk_e IS NOT NULL AND (nu_e IS NOT NULL OR mi_e IS NOT NULL)
   THEN
	  cs := ' & ';
   END IF;

   x := 'Only ' || mi_e || nu_e || cr || ' ' || cs || fk_e;

   IF nvl(round(num,frc),0) = 0
   THEN
	  x := 'Zero ' || cur;
   END IF;

   RETURN (x);
END;


- أحمد جادو -
Senior Oracle Developer
Alhasa
Municipality

Alhasa - Saudi Arabia


#3 أحمد جادو

أحمد جادو

    عضو نشط

  • الأعضــاء
  • 244 مشاركة
  • الاسم الأول:أحمد
  • اسم العائلة:جادو
  • البـلـد: Country Flag
  • المنصب الحالي:Senior Oracle Developer @ Alhasa Municipality

تاريخ المشاركة 27 December 2009 - 04:39 PM

الصيغة بشكل أفضل
CREATE OR REPLACE FUNCTION only_en (
   num	NUMBER,
   frc	NUMBER,
   cur	VARCHAR2,
   deca   VARCHAR2
)
   RETURN VARCHAR2
IS
   x	  VARCHAR2 (1000);
   mi	 NUMBER (30);
   nu	 NUMBER (30);
   fk	 NUMBER (30);
   mi_e   VARCHAR2 (1000);
   nu_e   VARCHAR2 (1000);
   fk_e   VARCHAR2 (1000);
   cs	 VARCHAR2 (30);
   cr	 VARCHAR2 (30);
BEGIN
   SELECT TRUNC (num / 1000000)
	 INTO mi
	 FROM DUAL;

   IF mi <> 0
   THEN
	  SELECT	TO_CHAR (TO_DATE (TRUNC (num / 1000000), 'J'), 'jsp')
			 || ' million '
		INTO mi_e
		FROM DUAL;
   END IF;

   SELECT TRUNC (num) - TRUNC (num / 1000000) * 1000000
	 INTO nu
	 FROM DUAL;

   IF nu <> 0
   THEN
	  SELECT TO_CHAR (TO_DATE (TRUNC (num) - TRUNC (num / 1000000) * 1000000,
							   'J'
							  ),
					  'jsp'
					 )
		INTO nu_e
		FROM DUAL;
   END IF;

   SELECT (ROUND (num, frc) - TRUNC (num)) * POWER (10, frc)
	 INTO fk
	 FROM DUAL;

   IF fk <> 0
   THEN
	  SELECT	TO_CHAR (TO_DATE (  (ROUND (num, frc) - TRUNC (num))
								  * POWER (10, frc),
								  'J'
								 ),
						 'jsp'
						)
			 || ' '
			 || deca
		INTO fk_e
		FROM DUAL;
   END IF;

   IF nu_e IS NOT NULL OR mi_e IS NOT NULL
   THEN
	  cr := ' ' || cur;
   END IF;

   IF fk_e IS NOT NULL AND (nu_e IS NOT NULL OR mi_e IS NOT NULL)
   THEN
	  cs := ' & ';
   END IF;

   x := 'Only ' || mi_e || nu_e || cr || ' ' || cs || fk_e;

   IF NVL (ROUND (num, frc), 0) = 0
   THEN
	  x := 'Zero ' || cur;
   END IF;

   RETURN (x);
END;

ويتكون بها دالة تأخذ 4 باراميتار (القيمة، عدد الكسور العشرية، اسم العملة، اسم كسر العملة

مثال
SELECT only_en (512340241.12156454, 2, 'US Dollar', 'Cent')
  FROM DUAL

النتيجة

Only five hundred twelve million three hundred forty thousand two hundred forty-one US Dollar  & twelve Cent


- أحمد جادو -
Senior Oracle Developer
Alhasa
Municipality

Alhasa - Saudi Arabia


#4 homesick

homesick

    مشترك

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

تاريخ المشاركة 31 December 2009 - 02:24 PM

أبدعت أخ أحمد
بوركت وزاد الله في علمك

تم التعديل بواسطة homesick, 31 December 2009 - 02:25 PM.

من وجد الله فماذا فقد ؟!!

ومن فقد الله فماذا وجـــــد ؟!!

#5 mostfa_future

mostfa_future

    عضو مميز

  • الأعضــاء
  • 570 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 01 January 2010 - 02:36 AM

ارجو من الاخ صاحب الكود اضافات كومند للتوضيح

لا تحسبن المجد تمرا أنت اكله *** لن تبلغ المجد حتى تلعق الصبر


صورةصورة


#6 محمد عمر مكي

محمد عمر مكي

    مشترك

  • الأعضــاء
  • 52 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 08 February 2010 - 07:44 PM

السلام عليكم ورحمة الله وبركاته
Select To_char(To_Date('5535','J'),'JSP') As Func From Dual;

شكراً للاخ جادوا ومن قبله الأخ هاني على هذه الدالة لكن للأسف هذه الدالة ذات نظاق محدود جداً

يعني تحول الأرقام لحدي 5373484
وأي رقم أكبر من كده تجيب معاه الرسالة دي
ERROR:
ORA-01854: julian date must be between 1 and 5373484

هل من دالة في سطر واحد تحول رقم أكبر من كده

#7 أحمد جادو

أحمد جادو

    عضو نشط

  • الأعضــاء
  • 244 مشاركة
  • الاسم الأول:أحمد
  • اسم العائلة:جادو
  • البـلـد: Country Flag
  • المنصب الحالي:Senior Oracle Developer @ Alhasa Municipality

تاريخ المشاركة 08 February 2010 - 09:09 PM

للأسف يا أستاذ محمد مفيش حاجة بتحول الأرقام مباشرة أكبر من كده ولا حتى فيها كسور
وده عشان الصيغة JSP دي format mask للتاريخ وكتر خير أوراكل إنها بتعمل الخدمة دي
عشان كده أنا عملت الفانكشكن اللي مذكورة فوق لإضافة الشق الخاص بالكسور وبالأرقام الأكبر من 5 مليون

ولو عاوز حاجة بتعمل التفقيط ده بالعربي

اتفضل شوف المشاركة دي
http://www.araboug.o...i...&pid=143291


- أحمد جادو -
Senior Oracle Developer
Alhasa
Municipality

Alhasa - Saudi Arabia