PDA

View Full Version : سوال: بهترین نوع داده برای ذخیره تاریخ شمسی تو پایگاه داده sql 2008 چیه؟



iman_pc_love
شنبه 29 بهمن 1390, 21:08 عصر
سلام
من برای اولین بار میخام تو C# پروژه ای رو کار کنم و نیاز به ذخیره تاریخ شمسی دارم تو Sql 2008
خوب اون قدیما که .net نبود مثلاً تو V.B از روشهای من درآوردی استفاده می کردیم برای ذخیره تاریخ، مثلاً ذخیره به صورت کاراکتری یا حتی اینتیجر ولی الان که خود .net کلاس persianCalendar را داره و احتمالاً sql 2008 هم به خوبی از تاریخ شمسی پشتیبانی میکنه.
من سوالم از دوستانی که تجربه دارن اینه که بهترین نوع داده برای ذخیره تاریخ شمسی تو پایگاه داده چیه؟

1- اگه نوع فیلد رو datetime بگیریم و تاریخ رو شمسی ذخیره کنیم ممکنه؟ اگه ممکنه بعداً تو کوئری ها از order by استفاده کنیم جواب میده؟
2-اگه تاریخ رو به صورت میلادی ذخیره کنیم تو دیتابیس و بعداً که نیاز به تاریخ داشتیم میلادی از دیتابیس بخونیم و بعد تو برنامه تبدیل به شمسی کنیم؟
یا هر روش دیگه مزایا و معایت هر کدوم از این روشا چیه؟

Sirwan Afifi
شنبه 29 بهمن 1390, 21:31 عصر
دوست عزیز شما می تونید نوع فیلد رو روی nvarchar بزاری (با استفاده از کلاس PersianCalender تاریخ توی دیتابیس ذخیره کنید.)

iman_pc_love
یک شنبه 30 بهمن 1390, 00:19 صبح
اگه این کار رو بکنم برای کوئری هایی که order by داره یا کوئری هایی که مقایسه تاریخی و کلاً کارایی که با نوع داده DateTime میشه انجام داد،مشکلی نیست؟ من میدونم این کار شدنیه میخام راه استاندارد و بهترین را پیدا کنم

roxe77
یک شنبه 30 بهمن 1390, 01:44 صبح
بهتری! دقیق ترین ! جالبترین ذخیره به صورت میلادی هست زمان استفاده هم تبدیلش کنی به شمسی همین ! من پروژه های گنده ای نوشتم و تا حالا هم مشکلی گیر نکردم

davoodrm666_666
یک شنبه 30 بهمن 1390, 08:04 صبح
ما هم تو پروژه هامون که تاریخ خیلی مهمه نوع اون رو int گذاشته و ذخیره می کنیم

iman_pc_love
یک شنبه 30 بهمن 1390, 10:07 صبح
شما دوستان چرا از همون نوع داده DateTime استفاده نمی کنید؟

iman_pc_love
یک شنبه 30 بهمن 1390, 19:08 عصر
اصلاً اگه بخایم تاریخ میلادی هم ثبت کنیم خوب میشه به صورت اینتیجر ذخیره کرد تو دیتابیس ، پس چه لزومی داره DATETIME بزاریم؟

Javad_Darvish_Amiry
دوشنبه 01 اسفند 1390, 11:32 صبح
من پیشنهاد میکنم تاریخ شمسی رو به میلادی تبدیل و با نوع datetimeoffset ذخیره کنید. نوع معادلش هم DateTimeOffset هست. همیشه یه TimeZone رو با خودش حمل میکنه پس نگران جابجایی پایگاه یا عوض کردن اتفاقی تنظیمات منطقه زمانی توسط کاربر نهایی نیستید. همه عملیاتی که رو DateTime داشتید، اینجا هم دارید. موفق باشید.

firoozi90
چهارشنبه 03 اسفند 1390, 00:31 صبح
به نظر من بهترین نوع nvarchar هست و هنگام ثبت توی جدول اونو به فرض به صورت 1390/08/06 وارد کنید به جای اینکه به شکل 1390/8/6 وارد کنید.
اینجوری توی جستجو و مقایسه ها هیچ مشکلی نخواهید داشت.خیالتون راحت باشه

p.parsaee
سه شنبه 09 اسفند 1390, 06:53 صبح
دوستان البته به نظر من بستگي به كاربرد نرم افزار داره كه nvarchar ذخيره كنيم يا datetime

مثلا اگه شما بخوايد نرم افزاري بنويسيد كه پردازش زيادي روي تاريخ انجام نميده شايد بهتر باشه نوع فيلد تاريخ رو nvarchar بزاريم و شمسي ذخيره كنيم ، و اونو به فرمت yyyymmdd ذخيره كنيم
ولي اگه نرم افزار كارش با تاريخها فراتر از نمايش و ذخيره تاريخ هاست و قراره كارهاي پردازشي رو روي تاريخ انجام بده بهتره كه تاريخ به صورت ميلادي ذخيره بشه و توي برنامه تبديل به شمسي بشه

hasti44
چهارشنبه 24 اسفند 1390, 23:09 عصر
سلام
برای مقایسه دو تاریخ از چه تابعی باید استفاده کنم
هردو فیلد هم از نوع dateهستن

siamat
پنج شنبه 26 دی 1392, 16:00 عصر
با Equals در linq

سلام
برای مقایسه دو تاریخ از چه تابعی باید استفاده کنم
هردو فیلد هم از نوع dateهستن