تحديد ما إذا كان تاريخ Oracle في عطلة نهاية الأسبوع؟

StackOverflow https://stackoverflow.com/questions/3450965

  •  27-09-2019
  •  | 
  •  

سؤال

هل هذه هي أفضل طريقة لتحديد ما إذا كان تاريخ أوراكل في عطلة نهاية الأسبوع؟

select * from mytable
where 
TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN');
هل كانت مفيدة؟

المحلول

اعتبارا من أوراكل 11G ، نعم. البديل غير الملحوظ في المنطقة الوحيدة القابلة للحياة هو كما يلي:

SELECT *
FROM mytable
WHERE MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7);

نصائح أخرى

ليست إجابة على السؤال. لكن المزيد من المعلومات. هناك العديد من الحيل SQL مع التاريخ.

to_char(sysdate, 'd') --- day of a week, 1,2,3 .. to 7
to_char(sysdate, 'dd') --- day of a month, 1,2,3 .. to 30 or 31
to_char(sysdate, 'ddd') --- day of a year, 1,2,3 .. to 365 or 366
to_char(sysdate, 'w') --- week of a month, 1,2,3,4 or 5
to_char(sysdate, 'ww') --- week of a year, 1,2,3 .. to 52

المزيد هنا: to_char وظيفة.

MOD(TO_CHAR(my_date, 'J'), 7) + 1 IN (6, 7)

غير صحيح! قد يكون عدد أيام عطلة نهاية الأسبوع 6 و 7 ، أو 7 و 1 ، اعتمادًا على عمليات تحديد NLS.

لذا فإن الاختبار الصحيح (بغض النظر عن عمليات تحديد NLS) هو هذا الاختبار المذكور من قبل:

TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')

في رأيي الخيار الأفضل هو

TO_CHAR (my_date, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN')

اضبط NLS_TERRIRATION من قبل

alter session set NLS_TERRITORY=SWEDEN;

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top