PDA

View Full Version : بدست آوردن سطرهای بین تاریخ رشته ای



Yama12
چهارشنبه 20 شهریور 1387, 00:06 صبح
سلام به همه عزیزان
من تو دیتا بیسم تاریخ رو بصورت char دخیره میکنم
حالا میخوام گزارش تهیه کنم در بین دو تاریخ معیین
حالا تاریخ رو بصورت بصورترشته دارم
بهترین راه برای بدست آوردن سطرهایی که بین این تاریخ ها هستن چیه؟
مرسی از کمکتون

Xcalivorse
چهارشنبه 20 شهریور 1387, 00:27 صبح
تاریخ رو باید به صورت عدد ذخیره کنید. بنابراین به راحتی میتونید کاری رو که میخواهید انجام بدید.
در این روش ابتدا قسمت های مختلف یک تاریخ رو ( روز، ماه، سال) به صورت رشته درآورده و پس از چسباندن آنها بهم رشته مورد نظر رو تبدیل به عدد میکنیم. سپس عدد رو در دیتابیس ذخیره میکنیم.
توی عکس ضمیمه مراحل نشون داده شده.

برای ذخیر سازی عدد در دیتا بیس نیاز به فیلدی از نوع Int دارید که فقط 4 بایت اشغال میکنه (4 بایت کمتر از DateTime). و میتونید به راحتی با استفاده از آن Query بگیرید. هر جور که فکرشو بکنید. به راحتی میتونید داده های بین دو تاریخ خاص رو بازیابی کنید یا داده های یک تارخ مورد نظر رو همچنین داده هایی که مثلا در روز نهم (در تمام تاریخ ها یا در یک بازه محدود) درج شدند و... .
توجه کنید عدد های تک رقمی باید به صورت صفر به همراه عدد نشان داده شود مثلا 1 به صورت 01 باید به رشته مورد نظر چسبیده شود.
به امید خدا نمونه برنامه اش هم که تموم شد ضمیمش میکنم.

دوستان اگر عیب یا نقصی به ذهنتون میرسه لطفا بگین.
امیدوارم مطلب یاد شده براتون مفید باشه.

Yama12
چهارشنبه 20 شهریور 1387, 00:36 صبح
خوب حالا چطوری من یک کوئری بگیرم بین دوتا تاریخ؟
یک نمونه اگر میشه برام بنویس

dr_csharp
چهارشنبه 20 شهریور 1387, 08:53 صبح
خوب حالا چطوری من یک کوئری بگیرم بین دوتا تاریخ؟
یک نمونه اگر میشه برام بنویس
این قسمت از سوالتون SQL میشه !!


select * from table1 where date between begin_date and end_date

Yama12
چهارشنبه 20 شهریور 1387, 11:35 صبح
این قسمت از سوالتون SQL میشه !!


select * from table1 where date between begin_date and end_date


اگر تاریخ رو بصورت datetime ذخیره میکردم که مشکلی نبود و حرف شما درست بود
اما من تاریخ رو بصورت رشته در دیتابیس ذخیره کردم
و بعدا تو کدام تبدیل میکنم به datetime
حالا دوتا datetime دارم و یک دیتا ست که میخوام سطر هایی از دیتاست رو که بین اون دوتا تاریخ هستم=ن رو بکشم بیرون
حالا چهکار کنم؟

dr_csharp
چهارشنبه 20 شهریور 1387, 11:41 صبح
اگر تاریخ رو بصورت datetime ذخیره میکردم که مشکلی نبود و حرف شما درست بود
اما من تاریخ رو بصورت رشته در دیتابیس ذخیره کردم
و بعدا تو کدام تبدیل میکنم به datetime
حالا دوتا datetime دارم و یک دیتا ست که میخوام سطر هایی از دیتاست رو که بین اون دوتا تاریخ هستم=ن رو بکشم بیرون
حالا چهکار کنم؟
با این دستور میتونی عملیات تبدیل رو انجام بدین

convert(datetime,2008/12/12)
بهتره نمونه ای از تاریخ ذخیره شده تو بانک رو نشون بدین تا بهتر راهنمایی بشین :لبخندساده:

Yama12
چهارشنبه 20 شهریور 1387, 15:51 عصر
من تاریخ رو به صورت
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);

حالا دوتا تاریخ دارم یکی "از" و یکی "تا" که بادی تمام سطرهایی که تاریخشون بین اینهاست رو بیرون بکشم

dr_csharp
چهارشنبه 20 شهریور 1387, 16:03 عصر
اگه تاریخ رو شمسی تو بانک خیه میکنی بهترین راهت همون روش دوستمون Xcalivorse (http://barnamenevis.org/forum/member.php?u=38226) هست !
درغیر اینصورت تاریخ شمسی رو تو برنامت به میلادی تبدیل و با تاریخ داخل بانکت مقایسه کن !

Yama12
چهارشنبه 20 شهریور 1387, 16:16 عصر
اگر بخوام از روش دوم استفاده کنم
یعنی اول به میلادی تبدیل میکنم
و دوتا تاریخ دارم حالا چطوری از دیتاستم سطرهایی رو که تاریخشون بین اینهاست بیرون بکشم؟

dr_csharp
چهارشنبه 20 شهریور 1387, 17:15 عصر
اگر بخوام از روش دوم استفاده کنم
یعنی اول به میلادی تبدیل میکنم
و دوتا تاریخ دارم حالا چطوری از دیتاستم سطرهایی رو که تاریخشون بین اینهاست بیرون بکشم؟
پست شماره ی 5 !

Yama12
پنج شنبه 21 شهریور 1387, 12:36 عصر
پست شماره ی 5 !
اگر منظورت شماره 4 هست که معلومه به از 3 روز هنوز سوال منو نفهمیدید
من تو دیتا بیسم تاریخ رو بصورت رشته ذخیره میکنم
کد :
select * from table1 where date between begin_date and end_date

که شما گفتی برای فیلدهای datetime هست:عصبانی++:

Yama12
پنج شنبه 21 شهریور 1387, 19:03 عصر
کسی نیست که به من کمک کنه
من خیلی عجله دارم و کارم گیر هست

Xcalivorse
پنج شنبه 21 شهریور 1387, 20:39 عصر
دوست عزیز من تو پست های قبلی براتون نوشتم تاریخ رو به صورت عدد و با روش گفته شده ذخیره کنید نه به صورت رشته. برای جستجو هم اونوقت مشکلی نداری چون عددی که از تاریخ امروزت به دست میاد همیشه یک واحد از تاریخ دیروز بزرگتره و عددی که از تاریخ فردا به دست میاد همیشه یک واحد از تاریخ امروزت بزرگتره.
در مثال زیر تمام داده هایی که در تاریخ ما بین 22/10/1386 تا 22/10/1387 با روش ذکر شده وارد شده اند نمایش داده میشود.

SELECT * FROM table2 WHERE MyDate >= 13861022 AND MyDate <= 13871022

محمدامین شریفی
پنج شنبه 21 شهریور 1387, 21:50 عصر
خسته نباشید جناب آقای Xcalivorse جون
yama خان اول من اگر جای شما بودم تاریخ را به صورت datetime ذخیره میکردم(که البته همه میدانند 1300 از range سال dotnet کمتر است)
خوب حالا چکار کنیم؟
بهترین کار از نظر من اینست که تاریخ در لایه کاربر پارسی باشد و در لایه دیتابیس جورجین باشد.
شما میتوانید datetimepiker را به پارسی set کنید(به وسیله dll) و با کد dotnet آنرا به جورجین تبدیل و سپس ذخیره کنید.
اگر وقت کردم،کدش را میگذارم.که البته سخت هم نیست داداشی
پیروز باشید

Yama12
پنج شنبه 21 شهریور 1387, 21:51 عصر
سلام مجدد
مرسی از راهنماییت
من 6 ماهه روی یک پروژه مار میکنم و حالا به آخرین مرحلش رسیدم یعنی گزارش گیری
پس نمیتونم 50 تا جدول رو تغییر بدم و 20 تا کلاس رو دوباره ویرایش کنم
پس لطفا راهی نشون بدید که با وظعیت فعلی من یعنی داشتن تاریخ بصورت رشته ای در دیتابیس بتونم بین دوتا تاریخ گزارش بگیرم

محمدامین شریفی
پنج شنبه 21 شهریور 1387, 21:55 عصر
دوست عزیز باا ستفاده از این فانکشن می تونی تاریخ شمسی رو به میلادی تبدیل کنی:

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();
}

محمدامین شریفی
پنج شنبه 21 شهریور 1387, 22:06 عصر
سلام مجدد
مرسی از راهنماییت
من 6 ماهه روی یک پروژه مار میکنم و حالا به آخرین مرحلش رسیدم یعنی گزارش گیری
پس نمیتونم 50 تا جدول رو تغییر بدم و 20 تا کلاس رو دوباره ویرایش کنم
پس لطفا راهی نشون بدید که با وظعیت فعلی من یعنی داشتن تاریخ بصورت رشته ای در دیتابیس بتونم بین دوتا تاریخ گزارش بگیرم
خوب پس
دوست خوبم.یه کد تو دات نت هست که رشته را تکه تکه میکند.
به این معنی که هر وقت که به عبارتی که شما مشخص کرده اید مانند(/)رشته را میبرد
الان تو ذهنم نیست.ولی کوشش میکنم واسط بنویسم.
وقتی که عبارت به روز،ماه،سال تغییر کرد.حالا به میلادی تبدیل کن.یا با همون کد دوستمون
SELECT * FROM table2 WHERE MyDate >= 13861022 AND MyDate <= 13871022
تفاوت را حساب کن.
من خودم شنبه باید پروژه تحویل بدم.وگرنه واسط مینوشتم.روی رشته ها کار کن(دات نت هم راحت تر از دیتابیس هست.کدات رو با دات نت پویش کن)

Xcalivorse
جمعه 22 شهریور 1387, 15:15 عصر
دوست خوبم.یه کد تو دات نت هست که رشته را تکه تکه میکند.
به این معنی که هر وقت که به عبارتی که شما مشخص کرده اید مانند(/)رشته را میبرد
الان تو ذهنم نیست.ولی کوشش میکنم واسط بنویسم.
وقتی که عبارت به روز،ماه،سال تغییر کرد.حالا به میلادی تبدیل کن.یا با همون کد دوستمون

دوست عزیز من بخاطر این تونستم به این راحتی Query بگیرم چون فیلدهای تاریخم از نوع عددی بود نه رشته ای.


من 6 ماهه روی یک پروژه مار میکنم و حالا به آخرین مرحلش رسیدم یعنی گزارش گیری
پس نمیتونم 50 تا جدول رو تغییر بدم و 20 تا کلاس رو دوباره ویرایش کنم
پس لطفا راهی نشون بدید که با وظعیت فعلی من یعنی داشتن تاریخ بصورت رشته ای در دیتابیس بتونم بین دوتا تاریخ گزارش بگیرم

خوب عزیز من نیازی نیست که فیلد رشته ای تو حذف کنی. میتونی به جدولت یه فیلد عددی هم برای نگه داری و کار با تاریخ اضافه کنی.

Yama12
جمعه 22 شهریور 1387, 15:20 عصر
مرسی آخرش مجبور شدم به عددی تبدیل کنم
من dll ی رو که datetimepicker رو به فارسی ست میکنه میخوام
کسی میتونه برام بزاره

Yama12
یک شنبه 24 شهریور 1387, 12:44 عصر
سلام
به نظرتون بهترین و کم دردسر ترین روش برای کار با تاریخ در یک پروژه چی هست
که هر کاری که بخواهی بتونی به راحتی انجام بدی
یعنی اینکه تاریخ رو به چه صورتی تو دیتابیس ذخیره کنیم و چطوری ازش استفاده کنیم
مرسی