الانتقال إلى المحتوى
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.

مشكلة بالمقارنة If To_char(sysdate,'day') In('friday','saturday')

Featured Replies

بتاريخ:

السلام عليكم

أريد أن أكتب بروسيجر ليقوم بعمل ما طوال أيام الإسبوع باستثناء الجمعة والسبت
ولكن لا أدري لماذا يعمل طوال أيام الإسبوع، ويتجاهل المقارنة
وعند التجربة للمقارنة برقم التاريخ فإنه يعمل !!!!!!!!!!!

مع الشكر الجزيل للجميع

مثال

REATE OR REPLACE procedure Test
as
log_file_handle utl_file.file_type;
begin

if to_char(sysdate,'DAY') in('FRIDAY','SATURDAY') or 
  to_char(sysdate,'yyyymmdd') = '20070101' or
  to_char(sysdate,'yyyymmdd') = '20061224'
then
  log_file_handle := UTL_FILE.FOPEN('C:\', 'Test1.txt','W');
  utl_file.put_line(log_file_handle,'--------------------------------------------');
  utl_file.put_line(log_file_handle,'Sorry, for TODAY Date: '||TO_CHAR(SYSDATE,'dd-mm-yyyy DAY'));
  utl_file.put_line(log_file_handle,'Thank You'); 
  utl_file.put_line(log_file_handle,'--------------------------------------------');
  utl_file.fclose(log_file_handle);

else

  log_file_handle := UTL_FILE.FOPEN('C:\', 'Test1.txt','W');
  utl_file.put_line(log_file_handle,'--------------------------------------------');
  utl_file.put_line(log_file_handle,'Good Work for Today = '||TO_CHAR(SYSDATE,'dd-mm-yyyy DAY'));
  utl_file.put_line(log_file_handle,'--------------------------------------------');
  utl_file.fclose(log_file_handle);
  
end if;

end;
/

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

بتاريخ:

السلام عليكم
الأخ NAJI_ALI

استخدم في المقارنة FUNCATION REPLACE لازالة المسافات الموجودة في التاريخ و ايضا استخدم في FUNCTION TO_CHAR تحويل لغة التاريخ الي ENGLISH لانه من الممكن ان تكون لغة التاريخ عندك او الNLS_DATE_LANGUAGE
عربي و كالتالي

BEGIN 
IF  REPLACE(TO_CHAR(SYSDATE, 'DAY', 'NLS_DATE_LANGUAGE=''ENGLISH'''),' ','') ='SUNDAY' THEN  
DBMS_OUTPUT.PUT_LINE('WORK OK ');
END  IF;
END ;


و يمكنك أيضا استخدام رقم اليوم للمقارنة كالتالي

BEGIN 
IF  REPLACE(TO_CHAR(SYSDATE, 'D', 'NLS_DATE_LANGUAGE=''ENGLISH'''),' ','') ='2' THEN  
DBMS_OUTPUT.PUT_LINE('WORK OK ');
END  IF;
END ;


مع ملاحظة ان يام السبت و الجمعة هي ارقام 1 و 7 علي التوالي و لكن بالطبع تختلف هذه الارقام حسب بداية ايام الاسبوع ان كانت عربي ام انجليزي
فالعربي يبدا من يوم السبت و الانجليزي من يوم الاثنين لذلك فاستخدام اسم اليوم نفسه أفضل
و قد جربتها و اشتغلت معي
بالتوفيق

بتاريخ:
  • كاتب الموضوع

أخي الحبيب hanon_OCP،

شكرا جزيلا للرد، والله يعطيك ألف عافية
أنا فهمت من ردك أن أوراكل تكمل إسم اليوم بمسافات فارغة ولغاية 9 حروف، ولا أدري لماذا جعلوها كذلك !!!!!!!!!!!
وبالمناسبة 9 هو طول يوم الأربعاء بالإنجليزي

وقمت بالتجربة التالية:

SELECT TRIM (TO_CHAR (SYSDATE, 'DAY')),
   LENGTH (TRIM (TO_CHAR (SYSDATE, 'DAY'))), TO_CHAR (SYSDATE, 'DAY'),
   LENGTH (TO_CHAR (SYSDATE, 'DAY')), TRIM (TO_CHAR (SYSDATE + 2, 'DAY')),
   LENGTH (TRIM (TO_CHAR (SYSDATE + 2, 'DAY'))),
   TO_CHAR (SYSDATE + 2, 'DAY'), LENGTH (TO_CHAR (SYSDATE + 2, 'DAY'))
 FROM tab



وبالتالي جربت إستخدام TRIM والحمد لله وصلت للنتيجة المطلوبة

if TRIM (to_char(sysdate,'DAY')) in ('FRIDAY','SATURDAY') or 
  to_char(sysdate,'yyyymmdd') = '20070101'	 then



ومرة أخرى أنا شاكر لتفاعلك معي في هذه المشاركة

أخوك
ناجي غانم

بتاريخ:

السلام عليكم
هلا فيك أخي ناجي
الحمد لله ان مشكلتك قد حلت ;)
أعاقد ان مسالة المسافات ربما تعود بسبب تحويل التاريخ الي char باستخدام فانكشن to_char
فربما كان الreturn datatype من نوع char
و هو كما تعرف fixed length بمعني انه اذا قل عدد حروف الكلمة عن الطول المعرف له فيتمم تكملة الباقي بمسافات
عموما ريح دماغك دايما و عن عم ل اي مقارنات باستخدام char field أن تستعم ل الفانكشن replace او trim
بالتوفيق دأئما

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

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

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

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.