View Full Version : جستجو بین دو تاریخ
amir_ir
دوشنبه 16 شهریور 1388, 20:01 عصر
سلام به همه دوستان
دیتا بیسی با SQL SERVER 2005 دارم و با ADO کار میکنم. 2 تا سوال دارم
1- فیلد تاریخی دارم که از نوع text هست. می خوام کدی رو بنویسم که بتونم بین دو تاریخ مشخص را جستجو کنم.
مثلا 02/11/1388 الی 25/12/1388
2- به چه شکل میشه در دیتابیس جستجویی در یک فیلد به این شکل داشت: کلیه اعدادی که در این فیلد مثلا از 4 بزرگتر و از 10 کوچکتر هستند؟
ممنون از همه دوستان
matinebi
دوشنبه 16 شهریور 1388, 20:08 عصر
1.از between استفاده کنید
2.این هم خیلی ساده با استفاده از > یا <
در مورد سوالتون لطفا سرچ کنید
bmanfy
سه شنبه 17 شهریور 1388, 08:56 صبح
این یک روش خیلی ساده
select datefield from tbl where (datefield >=@FromDate) and (datefield <= @ToDate)
روش بعدی هم همون between که دوستمون اشاره کردن .
select datefield from tbl where datefield between(@FromDate and @ToDate)
البته بهتره قبل از هر سوال یه سرچ هم بزنی .
amir_ir
سه شنبه 17 شهریور 1388, 21:48 عصر
این یک روش خیلی ساده
select datefield from tbl where (datefield >=@FromDate) and (datefield <= @ToDate)
روش بعدی هم همون between که دوستمون اشاره کردن .
select datefield from tbl where datefield between(@FromDate and @ToDate)
البته بهتره قبل از هر سوال یه سرچ هم بزنی .
خیلی ممنون از راهنماییتون.
آیا میشه از عملگر Like هم در کنار between در onchange یک Editbox استفاده کرد که با وارد کردن هر کاراکتر جستجو انجام بشه؟؟؟؟
hamidrah
پنج شنبه 19 شهریور 1388, 10:54 صبح
سلام
بله که میشه چرا نمیشه (نمیشه@ToDate)[/CODE)
select datefield from tbl where ((datefield between(@FromDate and @ToDate)) and (username like '+Quotedstr('%Hamid%')+'));
:لبخند:
ghasemshami
چهارشنبه 01 مهر 1388, 08:27 صبح
از این کد استفاده کن
select * from namebank where (namefielddate > '''+edit1.text+''') and (namefielddate < '''+edit2.text+''' )
farzane_fn
چهارشنبه 01 مهر 1388, 13:37 عصر
این یک روش خیلی ساده
select datefield from tbl where (datefield >=@FromDate) and (datefield <= @ToDate)
روش بعدی هم همون between که دوستمون اشاره کردن .
select datefield from tbl where datefield between(@FromDate and @ToDate)
البته بهتره قبل از هر سوال یه سرچ هم بزنی .
دوست عزیز سلام. من کد بالایی شما رو امتحان کردم.برای سرچ بین دو تاریخ ولی پیام خطا می ده پیام خطاش هم اینه:
Must declare the variable '@88'
چون من تاریخ 15/06/88 رو برای سرچ کردن وارد کردم.کدی هم که نوشته ام اینه:
select * from datetable where (date>=@'+maskedit3.Text+') and (date<=@'+maskedit4.Text+')'
می شه راهنمایی کنین.ممنون می شم
Saeed_m_Farid
چهارشنبه 01 مهر 1388, 16:38 عصر
از QuotedStr استفاده کنید!
'SELECT * FROM datetable WHERE (date>=@'+QuotedStr(maskedit3.Text)+
') and (date<=@'+QuotedStr(maskedit4.Text)+')'
farzane_fn
چهارشنبه 01 مهر 1388, 20:08 عصر
از QuotedStr استفاده کنید!
'SELECT * FROM datetable WHERE (date>=@'+QuotedStr(maskedit3.Text)+
') and (date<=@'+QuotedStr(maskedit4.Text)+')'
دوست عزیزم دستور شما رو اجرا کردم.پیام خطای زیر صادر شد:
Must declare the variable '@'
اگه راهنمایی کنین خیلی ممنون خواهم شد.
amir_ir
چهارشنبه 01 مهر 1388, 23:10 عصر
دوست عزیزم دستور شما رو اجرا کردم.پیام خطای زیر صادر شد:
Must declare the variable '@'
اگه راهنمایی کنین خیلی ممنون خواهم شد.
سلام فرزانه جان
@ رو از کدت حذف کن ، جواب میگیری . اگر اشتباه نکرده باشم @ ، اینجا به صورت کلی به نشانه متغیر استفاده میشه.
اگر در Sql server فیلدی مثل Date از نوع(10) Nvarchar تعریف کنی و کد زیر رو استفاده کنی حتما جواب میده. امتحان کردم.
DM2.ADOQtest.Active:=false;
DM2.ADOQtest.SQL.Clear;
DM2.ADOQtest.SQL.Text := 'SELECT * FROM TableName WHERE (date>='+QuotedStr(maskedit1.Text)+') and (date<='+QuotedStr(maskedit2.Text)+')' ;
ShowMessage(DM2.ADOQtest.SQL.Text);
DM2.ADOQtest.ExecSQL;
DM2.ADOQtest.Active:=true;
DBGrid1.DataSource.DataSet:=DM2.ADOQtest;
بعد از اینکه دستورات Sql نوشته شد ،بهتره که کد
ShowMessage(SQL.Text); نوشته بشه تا مشخص بشه دقیقاً قبل از اجرای Sql ، چه کد Sqlی قراره اجرا بشه. اگر کد قبلی خودتون رو Showmessage کنید متوجه میشید که @ اضافی هست و واسه همین پیغام میده که @ تعریف نشده است و باید Declare بشه.
من اطلاعات خیلی کمی دارم ولی امیدوارم اشتباه راهنماییت نکرده باشم و مفید بوده باشه(راستی DM2 اسم datamadule هست)
Saeed_m_Farid
پنج شنبه 02 مهر 1388, 09:05 صبح
sara_xz درست میگن، اشتباه از بنده بود، @ رو حذف کنید :
'SELECT * FROM datetable WHERE (date>='+QuotedStr(maskedit3.Text)+
') and (date<='+QuotedStr(maskedit4.Text)+')'
farzane_fn
پنج شنبه 02 مهر 1388, 12:24 عصر
سلام فرزانه جان
@ رو از کدت حذف کن ، جواب میگیری . اگر اشتباه نکرده باشم @ ، اینجا به صورت کلی به نشانه متغیر استفاده میشه.
اگر در Sql server فیلدی مثل Date از نوع(10) Nvarchar تعریف کنی و کد زیر رو استفاده کنی حتما جواب میده. امتحان کردم.
DM2.ADOQtest.Active:=false;
DM2.ADOQtest.SQL.Clear;
DM2.ADOQtest.SQL.Text := 'SELECT * FROM TableName WHERE (date>='+QuotedStr(maskedit1.Text)+') and (date<='+QuotedStr(maskedit2.Text)+')' ;
ShowMessage(DM2.ADOQtest.SQL.Text);
DM2.ADOQtest.ExecSQL;
DM2.ADOQtest.Active:=true;
DBGrid1.DataSource.DataSet:=DM2.ADOQtest;
بعد از اینکه دستورات Sql نوشته شد ،بهتره که کد
ShowMessage(SQL.Text); نوشته بشه تا مشخص بشه دقیقاً قبل از اجرای Sql ، چه کد Sqlی قراره اجرا بشه. اگر کد قبلی خودتون رو Showmessage کنید متوجه میشید که @ اضافی هست و واسه همین پیغام میده که @ تعریف نشده است و باید Declare بشه.
من اطلاعات خیلی کمی دارم ولی امیدوارم اشتباه راهنماییت نکرده باشم و مفید بوده باشه(راستی DM2 اسم datamadule هست)
سارا جان سلام.از اینکه راهنمایی کردی یه دنیا ازت ممنونم.اون دستور showmessage که گفته بودی مشکلم رو حل کرد. حالا یه سوالی دارم.می تونی بگی عزیزم که اگه بخوام تاریخ ها به ترتیب باشند مثلا از کوچیک به بزرگ چه کدی باید بنویسم؟ممنون می شم. بازم ازت ممنونم.
amir_ir
جمعه 03 مهر 1388, 10:41 صبح
سارا جان سلام.از اینکه راهنمایی کردی یه دنیا ازت ممنونم.اون دستور showmessage که گفته بودی مشکلم رو حل کرد. حالا یه سوالی دارم.می تونی بگی عزیزم که اگه بخوام تاریخ ها به ترتیب باشند مثلا از کوچیک به بزرگ چه کدی باید بنویسم؟ممنون می شم. بازم ازت ممنونم.
سلام فرزانه جان
DataModule.ADOQuery.Active:=false;
DataModule.ADOQuery.SQL.Clear;
DataModule.ADOQuery.SQL.Text := 'SELECT * FROM TBLNAME WHERE (date>='+QuotedStr(maskedit1.Text)+') and date<='+QuotedStr(maskedit2.Text)+') order by date ASC ' ;
ShowMessage(DataModule.ADOQuery.SQL.Text);
DataModule.ADOQuery.ExecSQL;
DataModule.ADOQuery.Active:=true;
DBGrid1.DataSource.DataSet:=DataModule.ADOQuery
به صورت کلی اگر خواستید نتیجه صعودی باشه از Order by Fieldname ASC و اگر خواستید نتیجه نزولی باشه از Order By Fieldname DESC میشه استفاده کرد .
موفق باشی
koruir
یک شنبه 15 آذر 1388, 15:36 عصر
http://barnamenevis.org/forum/attachment.php?attachmentid=40770&stc=1&d=1260102928
سلام دوستان.
میدونم که تاریخ این بحث گذشته و مال خیلی وقت پیش هست.
اما خواستم سوال رو اینجا بگذارم تا بحث متمرکزتر باشه.
من از کدهای بالا استفاده کردم. اما جواب نگرفتم.
به این نتیجه رسیدم که احتمالا چیزی رو از قلم میندازم.
من به پیوست یه پروژه آپلود کردم. که از اساتید میخوام یه نگاه بهش بندازن و ببینن اشکال کار کجاست.
ممنون.
حسین شهریاری
دوشنبه 16 آذر 1388, 09:20 صبح
سلام
دوست عزیز چرا از Between استفاده نمیکنید؟
دراصل شما همون Between راشبیه سازس کردی ولی با ضریب اطمینان کمتر
حسین شهریاری
دوشنبه 16 آذر 1388, 09:42 صبح
دوست عزیز من برنامه شمه را دیدم و یه روش کاربردی براتون داخلش اعمال کردم که نه تنها برای تاریخهای میلادی بلکه برای تاریخهای شمسی هم قابل استفاده است.
ولی به نکات زیر توجه کنید:
1-فیلد تاریخ و ساعت را به date نام گذاری نکنید چرا که شناخته شده است.که من براتون اصلاحش کردم
2-نوع فیلد تاریخ را رشته ای بگیرید و تاریخ را بدون اسلش ذخیره کنین.مثل نمونه
3-برای نمایش به فیلد تاریخ یه ویو بدین.مثل نمونه
4-براحتی از between استفاده کنین
موفق باشید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.