الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

التفقيط

Featured Replies

بتاريخ:

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

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


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

بتاريخ:

هذه الدالة من تصميمي ومعتمدة على هذه الصيغة

 
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;

بتاريخ:

الصيغة بشكل أفضل

 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

بتاريخ:

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

تم تعديل بواسطة homesick

بتاريخ:

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

  • بعد 1 شهر...
بتاريخ:

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

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

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

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

بتاريخ:

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

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

اتفضل شوف المشاركة دي
http://www.araboug.org/ib/index.php?act=fi...&pid=143291

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.