PDA

View Full Version : تعریف نوع تاریخ در بانک و عملیات جستجو



noroozifar
پنج شنبه 23 مرداد 1393, 08:31 صبح
سلام
100 درصد میگید تکراریه بحث زیاد شده من تقریبا بیشتر پست های مربوطه را خواندم اما واقعا به نتیجه کلی نرسیده ام

یکی میگه از نوع رشته تعریف بشه ؟

یکی میگه از نوع datetime تعریف بشه ؟

دیگری میگه از نوع int تعریف بشه ؟

اخر تو این همه تاپیک یک نتیجه گیری کلی نبود !!!! چرا ؟

ما باید با یک فیلد تاریخ کارهای زیر را انجام بدهیم حالا نوعش تو بانک چی باشه که بشه عملیات های زیر را به راحتی انجام داد چی باشه بهتره ؟

1. جستجو یک تاریخ
2. جستجو ما بین دو تاریخ
3. نمایش تاریخ به شمسی برای کاربر
4. افزایش یک تاریخ
5. کاهش یک تاریخ
6. حذف یک رکورد در یک زمان مشخص ( که همان گزینه اول می شود )

من در برنامه هایم همیشه تاریخ رشته ذخیره میکردم چون اصلا نیازی به عملیات بالا نداشتم فقط کاربر می خواست تاریخ ببینه همین ولی الان یک پروژه دارم تمام عملیاتاش بر اساس تاریخ می باشد به نتیجه نرسیده ام نوع تاریخ را در بانک چی تعیین کنم و برای عملیات های بالا که ذکر کردم چگونه عمل کنم

لطفا راهنمایی کنید

parvizwpf
پنج شنبه 23 مرداد 1393, 08:56 صبح
شما یک فیلد برای میلادی بذار datetime و یکی هم برای شمسی char . هر جا نیاز به جستجو و پردازش بود یا میلادی انجام بده هر جا نمایش بود شمسی رو نشون بدید.

noroozifar
پنج شنبه 23 مرداد 1393, 10:01 صبح
شما یک فیلد برای میلادی بذار datetime و یکی هم برای شمسی char . هر جا نیاز به جستجو و پردازش بود یا میلادی انجام بده هر جا نمایش بود شمسی رو نشون بدید.

این که خیلی قاطی میشه دوباره کاری هم هست از طرفی کاربر فقط شمسی میشناسه و تاریخ های که میزنه برای جستجو شمسی می باشد

parvizwpf
پنج شنبه 23 مرداد 1393, 10:13 صبح
شما معادل تاریخها رو یه میلادی بگیرید و بعد بدید به دیتابیس برای مقایسه. هیچی مث این روش سریع نیست . دویاره کاری هم نیست. شما موقعی که بخواهید مثلا 2000 رکورد نشون بدید باید بیاید حالا بدون شمسی هی 2000 تبدیل انجام بدید مثلا تو گرید .

kahe.mehrdad
پنج شنبه 23 مرداد 1393, 10:25 صبح
سلام
100 درصد میگید تکراریه بحث زیاد شده من تقریبا بیشتر پست های مربوطه را خواندم اما واقعا به نتیجه کلی نرسیده ام

یکی میگه از نوع رشته تعریف بشه ؟

یکی میگه از نوع datetime تعریف بشه ؟

دیگری میگه از نوع int تعریف بشه ؟

اخر تو این همه تاپیک یک نتیجه گیری کلی نبود !!!! چرا ؟

ما باید با یک فیلد تاریخ کارهای زیر را انجام بدهیم حالا نوعش تو بانک چی باشه که بشه عملیات های زیر را به راحتی انجام داد چی باشه بهتره ؟

1. جستجو یک تاریخ
2. جستجو ما بین دو تاریخ
3. نمایش تاریخ به شمسی برای کاربر
4. افزایش یک تاریخ
5. کاهش یک تاریخ
6. حذف یک رکورد در یک زمان مشخص ( که همان گزینه اول می شود )

من در برنامه هایم همیشه تاریخ رشته ذخیره میکردم چون اصلا نیازی به عملیات بالا نداشتم فقط کاربر می خواست تاریخ ببینه همین ولی الان یک پروژه دارم تمام عملیاتاش بر اساس تاریخ می باشد به نتیجه نرسیده ام نوع تاریخ را در بانک چی تعیین کنم و برای عملیات های بالا که ذکر کردم چگونه عمل کنم

لطفا راهنمایی کنید
دوست من شما با چه زبانی برنامه مینویسی را نمیدونم ولی قاعده کلی اینه که شما دو تا متد TOShamsi و ToMiladi داشته باشی و تاریخ ها حتما به صورت میلادی در دیتابیس ذخیره بشوند.
در مورد تفریق دو تاریخ که تا اینجا حله، برای نمایش تاریخ فارسی فقط date مورد نظر را باید به تابع ToShamsi بدید و نمایش..
برای asp من این کار را انجام دادم و جواب هم داده.

noroozifar
پنج شنبه 23 مرداد 1393, 22:38 عصر
شما معادل تاریخها رو یه میلادی بگیرید و بعد بدید به دیتابیس برای مقایسه. هیچی مث این روش سریع نیست . دویاره کاری هم نیست. شما موقعی که بخواهید مثلا 2000 رکورد نشون بدید باید بیاید حالا بدون شمسی هی 2000 تبدیل انجام بدید مثلا تو گرید .

اره درسته روش شما مناسبه فکر تبدیل 2000 رکورد و نمایش تو گرید نبود زمان زیادی را صرف میکنه تا عملیات تبدیل صورت بگیره

ممنون

Mousavmousab
شنبه 25 مرداد 1393, 16:07 عصر
سلام

من تو فیلم آموزشی آقای طالب لو دیدم که می گفت از نوع( DateTime2(7 بگیرین تا بتونین شمسی را هم مثل میلادی ذخیره کنین. فرق DateTime2 با DateTime در این است که DateTime2 از تاریخ 00 میلادی (مبداٌ تاریخ مبلادی) تاریخ قبول می کنه و اینطوری میشه تاریخ شمسی را هم نوشت. آقای طالب لو می گفت از این نوع بگیرین. من توی پروژه واقعی این کار را نکردم ولی به صورت آزمایشی جالب بود ، ظاهراٌ جواب بده ، حتماٌ جواب میده که آقای طالب لو به شاگرداش می گفت این کار را بکنین.
این وسط دیگه تبدیلی هم وجود نداره توی رکورد های بالا خودشو نشون بده

موفق باشید.

veniz2008
یک شنبه 26 مرداد 1393, 16:25 عصر
سلام
100 درصد میگید تکراریه بحث زیاد شده من تقریبا بیشتر پست های مربوطه را خواندم اما واقعا به نتیجه کلی نرسیده ام

یکی میگه از نوع رشته تعریف بشه ؟

یکی میگه از نوع datetime تعریف بشه ؟

دیگری میگه از نوع int تعریف بشه ؟

اخر تو این همه تاپیک یک نتیجه گیری کلی نبود !!!! چرا ؟

ما باید با یک فیلد تاریخ کارهای زیر را انجام بدهیم حالا نوعش تو بانک چی باشه که بشه عملیات های زیر را به راحتی انجام داد چی باشه بهتره ؟

1. جستجو یک تاریخ
2. جستجو ما بین دو تاریخ
3. نمایش تاریخ به شمسی برای کاربر
4. افزایش یک تاریخ
5. کاهش یک تاریخ
6. حذف یک رکورد در یک زمان مشخص ( که همان گزینه اول می شود )

من در برنامه هایم همیشه تاریخ رشته ذخیره میکردم چون اصلا نیازی به عملیات بالا نداشتم فقط کاربر می خواست تاریخ ببینه همین ولی الان یک پروژه دارم تمام عملیاتاش بر اساس تاریخ می باشد به نتیجه نرسیده ام نوع تاریخ را در بانک چی تعیین کنم و برای عملیات های بالا که ذکر کردم چگونه عمل کنم

لطفا راهنمایی کنید
سلام.
موردهای 4 و 5 باعث میشن که سمت استفاده از تاریخ های رشته ای شمسی نرید، چون هنگام اضافه کردن و کم کردن از تاریخ ها باید کدنویسی اضافی انجام بدید، اینکه اولا هر ماه چند روز هست (29، 30 یا 31) ، سال کبیسه هست یا که خیر، دارید به ماه های 29 روزی اضافه می کنید یا 30 یا 31 روزی و ...
کار عقلانی نیست از رشته در چنین مواردی استفاده کنید، بنابراین همون میلادی بگیرید و در هنگام نمایش به کاربر به شمسی برگردونید.
اگر میلادی بگیرید متدهای آماده و بسیار خوبی در کار با تاریخ خواهید داشت (مثل DateAdd که هم می تونید برای افزایش تاریخ ها (دادن عدد مثبت) و هم برای کاهش تاریخ ها (دادن عدد منفی) ازش استفاده کنید). اگر فقط به تاریخ نیاز دارید (نه به تاریخ و زمان) از نوع date به جای datetime استفاده کنید. مثلا برای تاریخ 17-08-2014 جواب ها بصورت زیر هستن (منظور از Date1 فیلد تاریخ شما در جدول مربوطه و منظور از dd اضافه (یا کم کردن) بر حسب روز هست. برای ماه از mm و برای سال از yy یا yyyy استفاده کنید) :
برای اضافه کردن به تاریخ :

select DateAdd(dd,17, Date1) from TblDate
برای کم کردن از تاریخ :

select DateAdd(dd,-17, Date1) from TblDate

اره درسته روش شما مناسبه فکر تبدیل 2000 رکورد و نمایش تو گرید نبود زمان زیادی را صرف میکنه تا عملیات تبدیل صورت بگیره

ممنون
نه کاربر 2000 رکورد با هم نیاز داره که ببینه و نه برنامه نویس ها چنین کاری رو می کنن (گذشته از تبدیل میلادی به شمسی، اصلا لود زیاد اطلاعات با هم کار اشتباهی هست). باید از صفحه بندی استفاده کنید و تعداد مشخصی از رکورد (مثلا هر بار 20 رکورد) رو در هر مرحله نمایش بدید. نمونه برنامه paging هم چندین مورد در سایت وجود داره که با جستجو راحت پیدا می کنید.
موفق باشید.

lovee20002002
یک شنبه 02 شهریور 1393, 23:55 عصر
سلام

من تو فیلم آموزشی آقای طالب لو دیدم که می گفت از نوع( DateTime2(7 بگیرین تا بتونین شمسی را هم مثل میلادی ذخیره کنین. فرق DateTime2 با DateTime در این است که DateTime2 از تاریخ 00 میلادی (مبداٌ تاریخ مبلادی) تاریخ قبول می کنه و اینطوری میشه تاریخ شمسی را هم نوشت. آقای طالب لو می گفت از این نوع بگیرین. من توی پروژه واقعی این کار را نکردم ولی به صورت آزمایشی جالب بود ، ظاهراٌ جواب بده ، حتماٌ جواب میده که آقای طالب لو به شاگرداش می گفت این کار را بکنین.
این وسط دیگه تبدیلی هم وجود نداره توی رکورد های بالا خودشو نشون بده

موفق باشید.
این کار جواب نمیده تاریخ 29 تا 31 برج 2 هیچ سالی ذخیره نمیشه خیلی مشکل داره من با همین عناوین تو یه پروژه تست کردم بعد 2 ماه کار اررور ها امد مجبور شدم کل برنامه رو تغییر بدم