نمایش نتایج 1 تا 14 از 14

نام تاپیک: مشکل در select کردن افراد بین دو تاریخ

  1. #1
    کاربر دائمی آواتار mahdi_armed
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    سن
    31
    پست
    184

    مشکل در select کردن افراد بین دو تاریخ

    سلام اساتید گرامی
    من به یه مشکل خوردم که خودم نتونستم برطرفش کنم که از روی عکس توضیح میدم کامل.
    همونطور که میبینید من یک سری کارمند دارم که توی روز های هفته مرخصی میزنن
    کارمند اول یک روز
    کارمند دوم و سوم، ۲ روز
    کارمند چهارم ۵ روز

    و نقطه مشترک اینها، توی روز پنجم هست که همگی مرخصی رفتن

    حالا من چطور میتونم یک query داشته باشم که تعداد کارمند هایی که روز پنجم نیستن رو بدست بیارم ؟

    کدهای خودم هم میزارم. اما جوابی که میخواستم رو نتونستم بگیرم ازشون


    SELECT * FROM dbo.leave
    WHERE
    dateFrom BETWEEN '1401/01/05' AND '1401/01/05'
    OR
    dateTo BETWEEN '1401/01/05' AND '1401/01/05'
    OR dateTo >= '1401/01/05' AND dateFrom <= '1401/01/05'

    ORDER BY createdDate



    با این کدها، نفر چهارم که که قبل از تاریخ پنجم مرخصی رفته و چند روز بعد از پنجم اومده رو نمیتونم داشته باشم توی نتیجه

  2. #2
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: مشکل در select کردن افراد بین دو تاریخ

    سلام و روز خوش
    شرط where درست نیست!
    SELECT * FROM dbo.leave 
    WHERE dateFrom <= 14010105 AND dateTo >= 14010105
    ORDER BY createdDate


    و این که تاریخ حتما باید int ذخیره بشه و نه string !

  3. #3
    کاربر دائمی آواتار Apache66
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    شــــیراز
    پست
    318

    نقل قول: مشکل در select کردن افراد بین دو تاریخ

    تاریخ شمسی میتونه string هم ذخیره بشه و مشکلی نیست

  4. #4
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: مشکل در select کردن افراد بین دو تاریخ

    نقل قول نوشته شده توسط Apache66 مشاهده تاپیک
    تاریخ شمسی میتونه string هم ذخیره بشه و مشکلی نیست
    تفاوت هست بین اینکه کاری شدنی باشه و اینکه کاری درست باشه -
    مثل این که آب استخر رو با استکان هم میشه خالی کرد!

    اینکه تاریخ فارسی رو بجای int بصورت string نگهداری کنیم چون از نظر فنی نادرست هست پس مشکل دار هم هست.

  5. #5
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,170

    نقل قول: مشکل در select کردن افراد بین دو تاریخ

    سلام

    یه سوال تقریبا حاشیه ای. برنامه شما از کجا میدونه که کارمند کدام روزها حضور و غیاب براش انجام شده؟ احتمالا اگر در تاریخ مورد نظر مقدار null باشه و یا مثلا دستور Count مقدار 0 برگردونه و شاید هم با Exist بخواهید بررسی کنید، نبود مقدار را ملاک عدم حضور در نظر میگیرید؟ سوال اصلیم اینه که اگر کارمند از تارخ 6ام استخدام شده باشه و شما تاریخ 5ام رو برای این کارمند چطور بررسی میکنید؟

  6. #6
    کاربر دائمی آواتار Apache66
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    شــــیراز
    پست
    318

    نقل قول: مشکل در select کردن افراد بین دو تاریخ

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    تفاوت هست بین اینکه کاری شدنی باشه و اینکه کاری درست باشه -
    مثل این که آب استخر رو با استکان هم میشه خالی کرد!

    اینکه تاریخ فارسی رو بجای int بصورت string نگهداری کنیم چون از نظر فنی نادرست هست پس مشکل دار هم هست.
    از لحاظ فنی چه مشکی داره ؟!!!
    من الان با یک نرم افزار بزرگ 20 هزار کاربره دارم 12 سال اینطوری تاریخ ذخیره میکنم
    یک مورد مشکل نداشتم

  7. #7
    کاربر دائمی آواتار ROSTAM2
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    فارس
    پست
    1,639

    نقل قول: مشکل در select کردن افراد بین دو تاریخ

    بنظرم تاریخ شمسی از طریق SQL قابل شناسایی بعنوان Date نیست. و باید به تاریخ میلادی تبدیل بشه.
    sql - Converting GETDATE() to Hijri date to yyyymmdd - Stack Overflow

  8. #8
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    اصفهان - ایران
    پست
    292

    نقل قول: مشکل در select کردن افراد بین دو تاریخ

    خود MSSQL برای ما تبدیل میلادی به شمسی گذاشته
    select format(GETDATE(),'yyyy/MMMM/dddd','fa')
    select format(GETDATE(),'yyyy/MMM/dd','fa')
    select format(GETDATE(),'yy/MM/dd','fa')
    select format(GETDATE(),'yyyy/MM/dd','fa')

  9. #9
    کاربر دائمی آواتار ROSTAM2
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    فارس
    پست
    1,639

    نقل قول: مشکل در select کردن افراد بین دو تاریخ

    نقل قول نوشته شده توسط mahdi_armed مشاهده تاپیک
    سلام اساتید گرامی
    من به یه مشکل خوردم که خودم نتونستم برطرفش کنم که از روی عکس توضیح میدم کامل.
    همونطور که میبینید من یک سری کارمند دارم که توی روز های هفته مرخصی میزنن
    کارمند اول یک روز
    کارمند دوم و سوم، ۲ روز
    کارمند چهارم ۵ روز

    و نقطه مشترک اینها، توی روز پنجم هست که همگی مرخصی رفتن

    حالا من چطور میتونم یک query داشته باشم که تعداد کارمند هایی که روز پنجم نیستن رو بدست بیارم ؟

    کدهای خودم هم میزارم. اما جوابی که میخواستم رو نتونستم بگیرم ازشون


    SELECT * FROM dbo.leave
    WHERE
    dateFrom BETWEEN '1401/01/05' AND '1401/01/05'
    OR
    dateTo BETWEEN '1401/01/05' AND '1401/01/05'
    OR dateTo >= '1401/01/05' AND dateFrom <= '1401/01/05'

    ORDER BY createdDate



    با این کدها، نفر چهارم که که قبل از تاریخ پنجم مرخصی رفته و چند روز بعد از پنجم اومده رو نمیتونم داشته باشم توی نتیجه
    سلام.
    یک سوال برای هر سال یک دیتابیس جداگونه استفاده می شه یا اطلاعات تمام سالهای فعالیت اون اداره یا شرکت توی همون یک دیتابیس ذخیره می شه؟!
    من که ساختار جدول رو متوجه نشدم چطوریه -
    با این حال استفاده از کلمه کلیدی BETWEEN بین یک تاریخ منطقی نیست!
    و همچنین بنظر میاد ساختار جدول باید تغییر کنه.

    همچنین می شه تاریخ آغاز و پایان را باهم با یک کاراکتر جداکننده در یک فیلد ذخیره کرد و در زمان فراخوانی تاریخ ها رو با تابع STRING_SPLIT (Transact-SQL) جدا کرد.
    آخرین ویرایش به وسیله ROSTAM2 : چهارشنبه 04 آبان 1401 در 11:40 صبح

  10. #10
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: مشکل در select کردن افراد بین دو تاریخ

    نقل قول نوشته شده توسط Apache66 مشاهده تاپیک
    از لحاظ فنی چه مشکی داره ؟!!!
    من الان با یک نرم افزار بزرگ 20 هزار کاربره دارم 12 سال اینطوری تاریخ ذخیره میکنم
    یک مورد مشکل نداشتم
    این که شما مشکل رو نمیبینین دلیل بر نبودنش نیست.
    همچنین انجام کار نادرست در زمان طولانی و به دفعات زیاد هم اون رو درست نمیکنه.
    نمونه اش برنامه های بی کیفیتی هست که در سازمان های دولتی به وفور دیده میشه.

    این که چرا چیزی مثل تاریخ فارسی نباید string ذخیره بشه جزو بدیهیات هست، هم از نظر منطقی و هم از نظر کاربردی؛

    از نظر منطقی دلیلش این هست که تاریخ بطور کلی یک کمیت شمردنی هست و هر مقدار تاریخ عملا نسبت به یک مبدا شمرده میشه - حالا این شمارش میتونه برمبنای هزارم ثانیه باشه یا روز یا ...
    همچنین تمام عملیات روی تاریخ از نوع شمردنی هست: افزودن یا کم کردن روز/ماه/سال .... ، محاسبه اختلاف بین 2 تاریخ ، ...

    از نظر کاربردی دلیلش این هست که عملیات روی شماره ها بسیار سریعتر از عملیات روی stringها هست:
    در سطح ماشین مقایسه دو مقدار عددی فقط یک دستور نیاز داره ولی مقایسه دو string بصورت کارآکتر به کارآکتر انجام میشه و در عملیات با حجم زیاد زمانگیر هست.
    محاسبات روی بخش های مختلف یک کمیت شمارشی هم بسیار سریع انجام میشه (مثلا بیرون کشیدن مقدار سال) ولی در کمیت string این دست عملیات بمراتب وقت گیر تر هست.
    دست آخر این که عملا برای هر نوع محاسبه روی بخش های مختلف تاریخ از نوع string در نهایت باز باید به شماره تبدیل بشن.

    البته اگر مقدار تاریخ واقعا literal هست و قرار نیست هیچ نوع عملیاتی روی اون بشه اهمیتی نداره که چجوری ذخیره بشه.

  11. #11
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: مشکل در select کردن افراد بین دو تاریخ

    نقل قول نوشته شده توسط masoode مشاهده تاپیک
    خود MSSQL برای ما تبدیل میلادی به شمسی گذاشته
    select format(GETDATE(),'yyyy/MMMM/dddd','fa')
    select format(GETDATE(),'yyyy/MMM/dd','fa')
    select format(GETDATE(),'yy/MM/dd','fa')
    select format(GETDATE(),'yyyy/MM/dd','fa')
    بسیار عالی
    ولی مشکل ذخیره سازی مستقیم تاریخ فارسی رو حل نمیکنه.
    تاریخ sql فقط گرگورین هست (تا جایی که میدونم) و هنوز نمیشه تاریخ فارسی براش تعریف کرد.
    میشه تاریخ رو در front-end به گرگورین تبدیل و در sql ذخیره و عملیات datediff/dateadd رو هم در همون front-end با persian-calendar انجام داد.

    همچنین میشه تاریخ فارسی رو مستقیما بصورت int در sql ذخیره کرد ولی در front-end با اجزای اون یک تاریخ ساخت و عملیات رو در persian-calendar انجام داد.

  12. #12
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    اصفهان - ایران
    پست
    292

    نقل قول: مشکل در select کردن افراد بین دو تاریخ

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    بسیار عالی
    ولی مشکل ذخیره سازی مستقیم تاریخ فارسی رو حل نمیکنه.
    تاریخ sql فقط گرگورین هست (تا جایی که میدونم) و هنوز نمیشه تاریخ فارسی براش تعریف کرد.
    میشه تاریخ رو در front-end به گرگورین تبدیل و در sql ذخیره و عملیات datediff/dateadd رو هم در همون front-end با persian-calendar انجام داد.

    همچنین میشه تاریخ فارسی رو مستقیما بصورت int در sql ذخیره کرد ولی در front-end با اجزای اون یک تاریخ ساخت و عملیات رو در persian-calendar انجام داد.
    من همیشه تاریخ را با فرمت DateTime در دیتابیس ذخیره میکنم و موقع نمایش به شمسی تبدیل میکنم. که قبلا با یک فانکشن که در SQL داشتم این کار را انجام می دادم اما مدتی است که از همین روش بالا استفاده می کنم

  13. #13
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,044

    نقل قول: مشکل در select کردن افراد بین دو تاریخ

    نقل قول نوشته شده توسط masoode مشاهده تاپیک
    من همیشه تاریخ را با فرمت DateTime در دیتابیس ذخیره میکنم و موقع نمایش به شمسی تبدیل میکنم. که قبلا با یک فانکشن که در SQL داشتم این کار را انجام می دادم اما مدتی است که از همین روش بالا استفاده می کنم
    درسته و کار بسیار خوبی هم هست، اما اگر روی تاریخ یک سری عملیات خاص نیاز داشته باشین هنوز مجبور به کد نویسی در سمت fe هستین.
    به هر روی کاربر تاریخ رو به فرمت ایرانی وارد میکنه و یک بار در سمت برنامه شما اون رو به گرگورین تبدیل و در sql ذخیره میکنین.
    حالا اگر فرضا 50 روز بعد از یک تاریخ خاص رو بخواین خب مشکلی نیست و مستقیما در sql شدنی هست.

    اما اگر 3 ماه بعد از یک تاریخ معین مد نظر باشه، دیگه توابع سمت sql جوابگو نیستن باید اول در برنامه با persian calendar معادل گرگورین اون تاریخ رو پیدا و بعد اون رو در کوئری استفاده کنین.
    از طرفی اگر فقط نمایش تاریخ هدف هست دیگه چه نیازی هست تاریخی رو که کاربر به فرمت ایرانی در برنامه وارد کرده اول به گرگورین تبدیل و در sql ذخیره کنیم و دوباره برای نمایش اون رو برگردونیم.

    منظور من همین بود که چون sql (هنوز) مستقیما تاریخ ایرانی رو قبول نمیکنه (چه ذخیره سازی چه عملیات روی اون) این روش در حالت کلی بتنهایی کافی نیست،
    وگرنه در سودمندی و درستی گفته شما ایرادی نیست.

  14. #14
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    اصفهان - ایران
    پست
    292

    نقل قول: مشکل در select کردن افراد بین دو تاریخ

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    درسته و کار بسیار خوبی هم هست، اما اگر روی تاریخ یک سری عملیات خاص نیاز داشته باشین هنوز مجبور به کد نویسی در سمت fe هستین.
    به هر روی کاربر تاریخ رو به فرمت ایرانی وارد میکنه و یک بار در سمت برنامه شما اون رو به گرگورین تبدیل و در sql ذخیره میکنین.
    حالا اگر فرضا 50 روز بعد از یک تاریخ خاص رو بخواین خب مشکلی نیست و مستقیما در sql شدنی هست.

    اما اگر 3 ماه بعد از یک تاریخ معین مد نظر باشه، دیگه توابع سمت sql جوابگو نیستن باید اول در برنامه با persian calendar معادل گرگورین اون تاریخ رو پیدا و بعد اون رو در کوئری استفاده کنین.
    از طرفی اگر فقط نمایش تاریخ هدف هست دیگه چه نیازی هست تاریخی رو که کاربر به فرمت ایرانی در برنامه وارد کرده اول به گرگورین تبدیل و در sql ذخیره کنیم و دوباره برای نمایش اون رو برگردونیم.

    منظور من همین بود که چون sql (هنوز) مستقیما تاریخ ایرانی رو قبول نمیکنه (چه ذخیره سازی چه عملیات روی اون) این روش در حالت کلی بتنهایی کافی نیست،
    وگرنه در سودمندی و درستی گفته شما ایرادی نیست.

تاپیک های مشابه

  1. پاسخ: 1
    آخرین پست: چهارشنبه 19 آذر 1399, 15:55 عصر
  2. پاسخ: 0
    آخرین پست: پنج شنبه 13 تیر 1392, 12:45 عصر
  3. پاسخ: 1
    آخرین پست: جمعه 07 تیر 1392, 23:07 عصر
  4. پاسخ: 5
    آخرین پست: شنبه 19 مرداد 1387, 22:30 عصر
  5. استفاده از خروجی یه Select تو Select دیگر
    نوشته شده توسط federrer در بخش SQL Server
    پاسخ: 6
    آخرین پست: دوشنبه 29 مرداد 1386, 21:50 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •