ورود

View Full Version : دریافت لیست اطلاعات در یک بازه تاریخ خاص



shell32
چهارشنبه 08 تیر 1390, 20:23 عصر
سلام من زیاد با SQL کار نکردم

یه جدول دارم که ستونی به اسم Date داره که از نوع Nvarchar هست و مقدار های داخلش مثلا به این فرمته 12/5/1390 .حالا توی #C میخوام یه select بزنم که تمام اطلاعات از مثلا 12/5/1380 تا 12/5/1390 رو برام انتخاب کنه.اگه لطف کنین راهنمایی کنید ممنون میشم

aghayex
پنج شنبه 09 تیر 1390, 09:39 صبح
دوست عزیز شما برا فیلد های که عدد براتون ارزش داره رو یا باید از نوع عددی یا از نوع اون قالب خاص در نظر بگیری مثلا در مورد این نمونه شما باید از نوع تاریخ در نظر می گرفتید
حالا اگه اصرار بر باقی موندن این نوع دارد باید در قسمت شرطتون به این صورت بنویسید


convert(int,substring(date,0,4)+substring(date,5,2 )+substring(date,8,2))>=convert(int,substring(@date1,0,4)+substring(@date 1,5,2)+substring(@date1,8,2)) and convert(int,substring(date,0,4)+substring(date,5,2 )+substring(date,8,2))<=convert(int,substring(@date2,0,4)+substring(@date 2,5,2)+substring(@date2,8,2))

می بینید که خیلی بی کلاسه

mc_laren
پنج شنبه 09 تیر 1390, 12:13 عصر
مثل اینکه شما از یک فیلد از نوع رشته برای ذخیره دیتابیس استفاده می کنید
و برای این حالتی که شما می خواین فقط کافی (من خودم این کار رو انجام میدم) توی برنامه تون همیشه قتی می خواین تاریخ رو ذخیره کنه با یک قالب ثابت یعنی بصورت مثلا 1389/02/06 ذخیره کنه یعنی برای اعداد کمتر از 10 در روز و ماه یک صفر به عدد اضافه کنه . اگه اینجوری ذخیره کنید دیگه برای استفاده از شرط برای تاریخ هیچ مشکلی ندارین

shell32
پنج شنبه 09 تیر 1390, 17:31 عصر
مثل اینکه شما از یک فیلد از نوع رشته برای ذخیره دیتابیس استفاده می کنید
و برای این حالتی که شما می خواین فقط کافی (من خودم این کار رو انجام میدم) توی برنامه تون همیشه قتی می خواین تاریخ رو ذخیره کنه با یک قالب ثابت یعنی بصورت مثلا 1389/02/06 ذخیره کنه یعنی برای اعداد کمتر از 10 در روز و ماه یک صفر به عدد اضافه کنه . اگه اینجوری ذخیره کنید دیگه برای استفاده از شرط برای تاریخ هیچ مشکلی ندارین

میشه یک کد از select برام بنویسین که بدونم چه جوری select بزنم؟
من دو تا مقدار دارم date1 , date2
میخوام فیلد های جدول مثلا kala از تاریخ date1 تا date2 رو برام انتخاب کنه.
با تشکر

shell32
پنج شنبه 09 تیر 1390, 17:35 عصر
دوست عزیز شما برا فیلد های که عدد براتون ارزش داره رو یا باید از نوع عددی یا از نوع اون قالب خاص در نظر بگیری مثلا در مورد این نمونه شما باید از نوع تاریخ در نظر می گرفتید
حالا اگه اصرار بر باقی موندن این نوع دارد باید در قسمت شرطتون به این صورت بنویسید


convert(int,substring(date,0,4)+substring(date,5,2 )+substring(date,8,2))>=convert(int,substring(@date1,0,4)+substring(@date 1,5,2)+substring(@date1,8,2)) and convert(int,substring(date,0,4)+substring(date,5,2 )+substring(date,8,2))<=convert(int,substring(@date2,0,4)+substring(@date 2,5,2)+substring(@date2,8,2))

می بینید که خیلی بی کلاسه

ممنون از راحنماییتون.

میشه توضیح بدین این date,date1,date2 چی هستن؟
من الان نمیدونم چجوری از این کد داخل #C استفاده کنم

aghayex
پنج شنبه 09 تیر 1390, 19:53 عصر
DataTable rad = new DataTable();
SqlDataAdapter sqldb = new SqlDataAdapter();
sqldb.SelectCommand = new SqlCommand();
sqldb.SelectCommand.Connection = sqlcon;
sqldb.SelectCommand.CommandText =
"select date from table1 where convert(int,substring(date,0,4)+substring(date,5,2 )+substring(date,8,2))>=convert(int,substring(@date1,0,4)+substring(@date 1,5,2)+substring(@date1,8,2)) and convert(int,substring(date,0,4)+substring(date,5,2 )+substring(date,8,2))<=convert(int,substring(@date2,0,4)+substring(@date 2,5,2)+substring(@date2,8,2))"

sqldb.SelectCommand.Parameters.AddWithValue("@date1", date1.text);
sqldb.SelectCommand.Parameters.AddWithValue("@date2", date2.text);
sqlcon.Open();
sqldb.SelectCommand.ExecuteNonQuery();
sqldb.Fill(rad);

اما بازم می گم که برا تاریخ نوع رشته ای کاربرد نداره

aghayex
پنج شنبه 09 تیر 1390, 19:59 عصر
نقل قول: دریافت لیست اطلاعات در یک بازه تاریخ خاص


مثل اینکه شما از یک فیلد از نوع رشته برای ذخیره دیتابیس استفاده می کنید
و برای این حالتی که شما می خواین فقط کافی (من خودم این کار رو انجام میدم) توی برنامه تون همیشه قتی می خواین تاریخ رو ذخیره کنه با یک قالب ثابت یعنی بصورت مثلا 1389/02/06 ذخیره کنه یعنی برای اعداد کمتر از 10 در روز و ماه یک صفر به عدد اضافه کنه . اگه اینجوری ذخیره کنید دیگه برای استفاده از شرط برای تاریخ هیچ مشکلی ندارین


دوست عزیز ثبت تاریخ به صورت رشته یک کار کاملا اشتباه هست و معمولا اون رو به عدد تبدیل و بعد ثبت می کنن و هنگاه بازخوانی با یه تابع کوچیک دوباره اون رو به قالب دلخواه تبدیل می کنند