سلام به همه عزیزان
من تو دیتا بیسم تاریخ رو بصورت char دخیره میکنم
حالا میخوام گزارش تهیه کنم در بین دو تاریخ معیین
حالا تاریخ رو بصورت بصورترشته دارم
بهترین راه برای بدست آوردن سطرهایی که بین این تاریخ ها هستن چیه؟
مرسی از کمکتون
سلام به همه عزیزان
من تو دیتا بیسم تاریخ رو بصورت char دخیره میکنم
حالا میخوام گزارش تهیه کنم در بین دو تاریخ معیین
حالا تاریخ رو بصورت بصورترشته دارم
بهترین راه برای بدست آوردن سطرهایی که بین این تاریخ ها هستن چیه؟
مرسی از کمکتون
تاریخ رو باید به صورت عدد ذخیره کنید. بنابراین به راحتی میتونید کاری رو که میخواهید انجام بدید.
در این روش ابتدا قسمت های مختلف یک تاریخ رو ( روز، ماه، سال) به صورت رشته درآورده و پس از چسباندن آنها بهم رشته مورد نظر رو تبدیل به عدد میکنیم. سپس عدد رو در دیتابیس ذخیره میکنیم.
توی عکس ضمیمه مراحل نشون داده شده.
برای ذخیر سازی عدد در دیتا بیس نیاز به فیلدی از نوع Int دارید که فقط 4 بایت اشغال میکنه (4 بایت کمتر از DateTime). و میتونید به راحتی با استفاده از آن Query بگیرید. هر جور که فکرشو بکنید. به راحتی میتونید داده های بین دو تاریخ خاص رو بازیابی کنید یا داده های یک تارخ مورد نظر رو همچنین داده هایی که مثلا در روز نهم (در تمام تاریخ ها یا در یک بازه محدود) درج شدند و... .
توجه کنید عدد های تک رقمی باید به صورت صفر به همراه عدد نشان داده شود مثلا 1 به صورت 01 باید به رشته مورد نظر چسبیده شود.
به امید خدا نمونه برنامه اش هم که تموم شد ضمیمش میکنم.
دوستان اگر عیب یا نقصی به ذهنتون میرسه لطفا بگین.
امیدوارم مطلب یاد شده براتون مفید باشه.
خوب حالا چطوری من یک کوئری بگیرم بین دوتا تاریخ؟
یک نمونه اگر میشه برام بنویس
اگر تاریخ رو بصورت datetime ذخیره میکردم که مشکلی نبود و حرف شما درست بود
اما من تاریخ رو بصورت رشته در دیتابیس ذخیره کردم
و بعدا تو کدام تبدیل میکنم به datetime
حالا دوتا datetime دارم و یک دیتا ست که میخوام سطر هایی از دیتاست رو که بین اون دوتا تاریخ هستم=ن رو بکشم بیرون
حالا چهکار کنم؟
من تاریخ رو به صورت
1387/09/01
ذخیره میکنم
نمونه تبدیل شده به date time
//get From Date
int FYear = int.Parse(CboQ1FYear.SelectedItem.ToString());
int FMonth = int.Parse(CboQ1FMonth.SelectedItem.ToString());
int FDay = int.Parse(CboQ1FDay.SelectedItem.ToString());
DateTime FromDate = new DateTime(FYear, FMonth, FDay);
//get Till Date
int TYear = int.Parse(CboQ1TYear.SelectedItem.ToString());
int TMonth = int.Parse(CboQ1TMonth.SelectedItem.ToString());
int TDay = int.Parse(CboQ1TDay.SelectedItem.ToString());
DateTime TillDate = new DateTime(TYear, TMonth, TDay);
حالا دوتا تاریخ دارم یکی "از" و یکی "تا" که بادی تمام سطرهایی که تاریخشون بین اینهاست رو بیرون بکشم
اگه تاریخ رو شمسی تو بانک خیه میکنی بهترین راهت همون روش دوستمون Xcalivorse هست !
درغیر اینصورت تاریخ شمسی رو تو برنامت به میلادی تبدیل و با تاریخ داخل بانکت مقایسه کن !
اگر بخوام از روش دوم استفاده کنم
یعنی اول به میلادی تبدیل میکنم
و دوتا تاریخ دارم حالا چطوری از دیتاستم سطرهایی رو که تاریخشون بین اینهاست بیرون بکشم؟
کسی نیست که به من کمک کنه
من خیلی عجله دارم و کارم گیر هست
دوست عزیز من تو پست های قبلی براتون نوشتم تاریخ رو به صورت عدد و با روش گفته شده ذخیره کنید نه به صورت رشته. برای جستجو هم اونوقت مشکلی نداری چون عددی که از تاریخ امروزت به دست میاد همیشه یک واحد از تاریخ دیروز بزرگتره و عددی که از تاریخ فردا به دست میاد همیشه یک واحد از تاریخ امروزت بزرگتره.
در مثال زیر تمام داده هایی که در تاریخ ما بین 22/10/1386 تا 22/10/1387 با روش ذکر شده وارد شده اند نمایش داده میشود.
SELECT * FROM table2 WHERE MyDate >= 13861022 AND MyDate <= 13871022
خسته نباشید جناب آقای Xcalivorse جون
yama خان اول من اگر جای شما بودم تاریخ را به صورت datetime ذخیره میکردم(که البته همه میدانند 1300 از range سال dotnet کمتر است)
خوب حالا چکار کنیم؟
بهترین کار از نظر من اینست که تاریخ در لایه کاربر پارسی باشد و در لایه دیتابیس جورجین باشد.
شما میتوانید datetimepiker را به پارسی set کنید(به وسیله dll) و با کد dotnet آنرا به جورجین تبدیل و سپس ذخیره کنید.
اگر وقت کردم،کدش را میگذارم.که البته سخت هم نیست داداشی
پیروز باشید
سلام مجدد
مرسی از راهنماییت
من 6 ماهه روی یک پروژه مار میکنم و حالا به آخرین مرحلش رسیدم یعنی گزارش گیری
پس نمیتونم 50 تا جدول رو تغییر بدم و 20 تا کلاس رو دوباره ویرایش کنم
پس لطفا راهی نشون بدید که با وظعیت فعلی من یعنی داشتن تاریخ بصورت رشته ای در دیتابیس بتونم بین دوتا تاریخ گزارش بگیرم
دوست عزیز باا ستفاده از این فانکشن می تونی تاریخ شمسی رو به میلادی تبدیل کنی:
publicstaticstring ChangePersianDate(DateTime dateTime)
{
System.Globalization.GregorianCalendar PC = new System.Globalization.GregorianCalendar();
PC.CalendarType = System.Globalization.GregorianCalendarTypes.USEngl ish;
return PC.GetDayOfMonth(dateTime).ToString()
+ "/"
+ PC.GetMonth(dateTime).ToString()
+ "/"
+ PC.GetYear(dateTime).ToString();
}
خوب پس
دوست خوبم.یه کد تو دات نت هست که رشته را تکه تکه میکند.
به این معنی که هر وقت که به عبارتی که شما مشخص کرده اید مانند(/)رشته را میبرد
الان تو ذهنم نیست.ولی کوشش میکنم واسط بنویسم.
وقتی که عبارت به روز،ماه،سال تغییر کرد.حالا به میلادی تبدیل کن.یا با همون کد دوستمونSELECT * FROM table2 WHERE MyDate >= 13861022 AND MyDate <= 13871022
تفاوت را حساب کن.
من خودم شنبه باید پروژه تحویل بدم.وگرنه واسط مینوشتم.روی رشته ها کار کن(دات نت هم راحت تر از دیتابیس هست.کدات رو با دات نت پویش کن)
دوست عزیز من بخاطر این تونستم به این راحتی Query بگیرم چون فیلدهای تاریخم از نوع عددی بود نه رشته ای.دوست خوبم.یه کد تو دات نت هست که رشته را تکه تکه میکند.
به این معنی که هر وقت که به عبارتی که شما مشخص کرده اید مانند(/)رشته را میبرد
الان تو ذهنم نیست.ولی کوشش میکنم واسط بنویسم.
وقتی که عبارت به روز،ماه،سال تغییر کرد.حالا به میلادی تبدیل کن.یا با همون کد دوستمون
خوب عزیز من نیازی نیست که فیلد رشته ای تو حذف کنی. میتونی به جدولت یه فیلد عددی هم برای نگه داری و کار با تاریخ اضافه کنی.من 6 ماهه روی یک پروژه مار میکنم و حالا به آخرین مرحلش رسیدم یعنی گزارش گیری
پس نمیتونم 50 تا جدول رو تغییر بدم و 20 تا کلاس رو دوباره ویرایش کنم
پس لطفا راهی نشون بدید که با وظعیت فعلی من یعنی داشتن تاریخ بصورت رشته ای در دیتابیس بتونم بین دوتا تاریخ گزارش بگیرم
مرسی آخرش مجبور شدم به عددی تبدیل کنم
من dll ی رو که datetimepicker رو به فارسی ست میکنه میخوام
کسی میتونه برام بزاره
سلام
به نظرتون بهترین و کم دردسر ترین روش برای کار با تاریخ در یک پروژه چی هست
که هر کاری که بخواهی بتونی به راحتی انجام بدی
یعنی اینکه تاریخ رو به چه صورتی تو دیتابیس ذخیره کنیم و چطوری ازش استفاده کنیم
مرسی