بتاريخ: 27 ديسمبر 200916 سنة comment_180560 انا شوفت الكود اللى من سطر واحد وعجبنى جدا Select To_char(To_Date('5535','J'),'JSP') As Func From Dual; بس ليا سؤال لو الرقم فية كسور يتعمل ازاى برجاء الاهتماميعنى بدل 5535يبقى 5535.11 تقديم بلاغ
بتاريخ: 27 ديسمبر 200916 سنة comment_180575 هذه الدالة من تصميمي ومعتمدة على هذه الصيغة 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; تقديم بلاغ
بتاريخ: 27 ديسمبر 200916 سنة comment_180579 الصيغة بشكل أفضل 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 تقديم بلاغ
بتاريخ: 31 ديسمبر 200916 سنة comment_181002 أبدعت أخ أحمدبوركت وزاد الله في علمك تم تعديل 31 ديسمبر 200916 سنة بواسطة homesick تقديم بلاغ
بتاريخ: 8 فبراير 201016 سنة comment_184516 السلام عليكم ورحمة الله وبركاتهSelect To_char(To_Date('5535','J'),'JSP') As Func From Dual; شكراً للاخ جادوا ومن قبله الأخ هاني على هذه الدالة لكن للأسف هذه الدالة ذات نظاق محدود جداً يعني تحول الأرقام لحدي 5373484 وأي رقم أكبر من كده تجيب معاه الرسالة دي ERROR:ORA-01854: julian date must be between 1 and 5373484هل من دالة في سطر واحد تحول رقم أكبر من كده تقديم بلاغ
بتاريخ: 8 فبراير 201016 سنة comment_184521 للأسف يا أستاذ محمد مفيش حاجة بتحول الأرقام مباشرة أكبر من كده ولا حتى فيها كسوروده عشان الصيغة JSP دي format mask للتاريخ وكتر خير أوراكل إنها بتعمل الخدمة ديعشان كده أنا عملت الفانكشكن اللي مذكورة فوق لإضافة الشق الخاص بالكسور وبالأرقام الأكبر من 5 مليونولو عاوز حاجة بتعمل التفقيط ده بالعربي اتفضل شوف المشاركة ديhttp://www.araboug.org/ib/index.php?act=fi...&pid=143291 تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.