ما هو بديل دالة WeekOfTheYear في sql
#1
السلام عليكم ورحمة الله وبركاته
بحث كثيراً عن البديل فلم اجد سوى دالة DATEPART تعمل في sql server فقط
كود :
SELECT DATEPART(wk, GETDATE()); select DATEPART(WK, '01/03/2016'); او// DECLARE @date date = '2024-07-20'; SELECT     DATEPART(week, @date) AS week,     DATEPART(wk, @date) AS wk,     DATEPART(ww, @date) AS ww; Result: +--------+------+------+ | week  | wk  | ww  | |--------+------+------| | 29    | 29  | 29  | +--------+------+------+ 
فهل من بديل؟
الرد
#2
وعليك السلام
جرب
كود :
DATE_ADD(time_stamp, INTERVAL DATEDIFF('2010-12-31', time_stamp) DAY)
[-] كل من 1 user says قال شكرا ل ALG2009 على المشاركة المفيدة
  • samnaj00
الرد
#3
وعليك السلام ورحمة الله وبركاته

سؤالك ناقص لم تحدد قاعدة البيانات التي تعمل عليها

بالنسبة لـ Firebird

البديل لـ DATEPART هي EXTRACT

رابط لشرح

https://firebirdsql.org/refdocs/langrefu...tract.html

[صورة: 173159022.png]
‏اللّهمّ فرّج أُموراً ضَاقت بها صُدورنا وعجزت بها حيلتنا وقلّ بها صَبرنا الّلهمّ أَسعِد قلوبنا بما أنتَ أعْلَمُ بِهِ مِنّا
[-] كل من 1 user says قال شكرا ل larbiparadox على المشاركة المفيدة
  • samnaj00
الرد
#4
(01-07-2021, 07:13 PM)ALG2009 كتب : وعليك السلام
جرب
كود :
DATE_ADD(time_stamp, INTERVAL DATEDIFF('2010-12-31', time_stamp) DAY)

(01-07-2021, 09:14 PM)larbiparadox كتب : وعليك السلام ورحمة الله وبركاته

سؤالك ناقص لم تحدد قاعدة البيانات التي تعمل عليها

بالنسبة لـ Firebird

البديل لـ DATEPART هي EXTRACT
 
المعذرة على عدم ذكر قاعدة البيانات absolute ولذلك date_add لم تعمل
اما extract في تعمل فقط مع day , month , year
الرد
#5
(03-07-2021, 11:43 AM)samnaj00 كتب :
(01-07-2021, 07:13 PM)ALG2009 كتب : وعليك السلام
جرب
كود :
DATE_ADD(time_stamp, INTERVAL DATEDIFF('2010-12-31', time_stamp) DAY)

(01-07-2021, 09:14 PM)larbiparadox كتب : وعليك السلام ورحمة الله وبركاته

سؤالك ناقص لم تحدد قاعدة البيانات التي تعمل عليها

بالنسبة لـ Firebird

البديل لـ DATEPART هي EXTRACT
 
المعذرة على عدم ذكر قاعدة البيانات absolute ولذلك date_aad لم تعمل
اما extract في تعمل فقط مع day , month , year

* الدلفي بحر واسع من الاوامر ، يمكن الحصول على أي نتيجة بطرق و أفكار معقدة

* في حالة absolute يمكنك العمل الفلترة بين تاريخين ، وذلك من تاريخ معين نستخرج رقم الاسبوع و بعدها نستخرج تاريخ بداية الاسبوع و النهاية

نصرح بالمتغيرات التالية dt للتاريخ ، sd لحجز بداية التاريخ wk رقم الاسبوع
كود :
var   dt,sd :TDateTime;   wk :Integer;

تحويل نص التاريخ 20-07-2024  إلى تاريخ
كود :
dt := EncodeDate(2024,07,20);

معرفة رقم الاسبوع من التاريخ
كود :
wk := WeekOfTheYear(dt);

معرفة تاريخ بداية الاسبوع المحدد برقم
كود :
sd := StartOfAWeek(YearOf(dt), wk);

لمعرفة تاريخ نهاية نضيف 6  إلى sd

الان لدينا التارخين المطلوبين
‏اللّهمّ فرّج أُموراً ضَاقت بها صُدورنا وعجزت بها حيلتنا وقلّ بها صَبرنا الّلهمّ أَسعِد قلوبنا بما أنتَ أعْلَمُ بِهِ مِنّا
[-] كل من 1 user says قال شكرا ل larbiparadox على المشاركة المفيدة
  • samnaj00
الرد
#6
(03-07-2021, 06:55 PM)larbiparadox كتب : * الدلفي بحر واسع من الاوامر ، يمكن الحصول على أي نتيجة بطرق و أفكار معقدة

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

(03-07-2021, 06:55 PM)larbiparadox كتب : * في حالة absolute يمكنك العمل الفلترة بين تاريخين ، وذلك من تاريخ معين نستخرج رقم الاسبوع و بعدها نستخرج تاريخ بداية الاسبوع و النهاية

نصرح بالمتغيرات التالية dt للتاريخ ، sd لحجز بداية التاريخ wk رقم الاسبوع
كود :
var   dt,sd :TDateTime;   wk :Integer;

تحويل نص التاريخ 20-07-2024  إلى تاريخ
كود :
dt := EncodeDate(2024,07,20);

معرفة رقم الاسبوع من التاريخ
كود :
wk := WeekOfTheYear(dt);

معرفة تاريخ بداية الاسبوع المحدد برقم
كود :
sd := StartOfAWeek(YearOf(dt), wk);

لمعرفة تاريخ نهاية نضيف 6  إلى sd

الان لدينا التارخين المطلوبين

جزاك الله خيراً
ما هي صيغة الاستعلام للحصول على رقم الاسبوع من جدول فيه عمود تاريخ my_dale ؟؟
الرد
#7
قبل طرح الموضوع

عملت على جلب رقم الاسبوع عن طريق for وكانت النتيجة تمام على اعتبار السبت اول الاسبوع
لكنني بانتظار الحل بالـ SQL
كود :
With ABSTable1 Do begin First; while Not EOF do begin Edit; ABSTable1num_week.Value := WeekOfTheYear(ABSTable1date_sale.Value + 2); Post; Next; end; end;

عدلت على الكود ليتم بالاضافة للكود السابق جلب اول الاسبوع ونهاية الاسبوع

كود :
With ABSTable1 Do begin First; while Not EOF do begin Edit; ABSTable1num_week.Value := WeekOfTheYear(ABSTable1date_sale.Value + 2); wk := WeekOfTheYear(ABSTable1date_sale.AsDateTime); sd := StartOfAWeek(YearOf(ABSTable1date_sale.AsDateTime), wk); ABSTable1date_First.Value := sd -2; ABSTable1date_End.Value := sd + 4; Post; Next; end; end;

لكن حصل مشكلة وهي أن تاريخ 1/1/2021 هو يوم الجمعة ورقم اسبوعه هو 53 لذلك تظهر رسالة تفيد بأن (1 / 53 / 2021) ليس تاريخاً


الملفات المرفقة
.rar   يومي اسبوعي شهري ربع سنوي0.rar (الحجم : 826.52 ك ب / التحميلات : 3)
الرد
#8
الخطأ ليس من عندك ،

كما نعلم أن عدد الأسابيع في السنة هو 52 ، لكن رقم رقم أسبوع 01-01-2021  هو 53 ، لكن الدالة StartOfAWeek لا تقبل 53 ... امر غريب !!!! ، عدلها برمجيا اذا كانت تساوي 53 اعدها الى 52

* سؤال : لماذا تظهر التاريخ بهذا الشكل
[صورة: 796262689.png]
‏اللّهمّ فرّج أُموراً ضَاقت بها صُدورنا وعجزت بها حيلتنا وقلّ بها صَبرنا الّلهمّ أَسعِد قلوبنا بما أنتَ أعْلَمُ بِهِ مِنّا
[-] كل من 1 user says قال شكرا ل larbiparadox على المشاركة المفيدة
  • samnaj00
الرد
#9
(06-07-2021, 09:00 PM)larbiparadox كتب : * سؤال : لماذا تظهر التاريخ بهذا الشكل

بما انني في وضع التصميم اظهرت اسم اليوم في التاريخ لأتأكد من او يوم واخر يوم في الاسبوع
بالنسبة لـ dddd

يبدو ان ddd  او dddd لاظهار اسم اليوم
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم