我在作日期查询时是这样的:
sql.Add(' ((验收日期 >=:ysrq1) and (验收日期 <=:ysrq2))') ;
ParamByName('ysrq1').AsDatetime:=d_ysrq1.Date;
parambyname('ysrq2').AsDatetime:=d_ysrq2.Date;
查询结果中等于的部分不存在。
如果将参数的类型设置为AsDate则提示错误。我的数据库时sql server,字段类型时Datetime。
sql.Add(' ((验收日期 >=:ysrq1) and (验收日期 <=:ysrq2))') ;
ParamByName('ysrq1').AsDatetime:=d_ysrq1.Date;
parambyname('ysrq2').AsDatetime:=d_ysrq2.Date;
查询结果中等于的部分不存在。
如果将参数的类型设置为AsDate则提示错误。我的数据库时sql server,字段类型时Datetime。
解决方案 »
- 用delphi实现判断当前窗体活动窗体是不是QQ登录窗体怎么写?
- 一个采用DCOM的三层系统的问题?在线等!!!!!!!!~~~~~~~~~~~~~~~~~~~
- 一简单问题,怎样获取计算器名?
- 想知道些系统路径的书写方式
- Query1.sql.add('??????????');要添加控件的属性怎么办??
- 怎么释放表单?
- 数据库时间问题
- 各位大侠,谁有dsgnintf.dcu这个文件啊!在线马上给分!
- 关于Delphi程序员的几个问题!
- 如何定位到新增记录?
- provider cannot be found 大伙帮我解决一下嘛!
- 配新电脑,散分 请您推荐一款液晶显示器,什么牌子的比较好?价格大概几何?
sql.add(' 验收时间 between :ysrql and :ysrq2');
sql.Add('验收时间 between :ysrq1 and :ysrq2') ;
ParamByName('ysrq1').AsDatetime:=d_ysrq1.Date;
parambyname('ysrq2').AsDatetime:=d_ysrq2.Date;
所以你可以将asdatetime 改为相应的asstring 把后面的date 转换到string
顺便跟踪一下,你的sql 语句 看看是否有问题
写SQL语句验证。
如:select *
from sj
where rssj between '2001-1-1' and '2002-1-1'
parambyname('ysrq2').Value:=FormatDateTime('yyyy-mm-dd',d_ysrq2.Date);因为Delphi的时间从1899年开始,而SQL Server的时间从1900年开始,她们差两天,而无论在Delphi还是SQL Server中日期型都是通过数值型存储传递,所以就出现以上偏差,只有通过字符传递才不存在问题!
同样,在其它数据库中也有类似错误,只是偏差不同而已!
二、ADOQuery1.SQL.Add(' and convert(char(10),b.OperatData,120)=:p_date ');
ADOQuery1.Parameters.ParamByName('p_date').Value:=datetostrDateTimePicker1.Date)
2. 在使用>= 或者 <=的时候 最大值 以及最小值 分别取的是 最小值 和 最大值
ParamByName('ysrq1').Asstring:=DateTostr(d_ysrq1.Date);
parambyname('ysrq2').Asstring:=DateTostr(d_ysrq2.Date);
判断日期你可以用datepart,或者
比如判断2003-5-1的数据你应该用 date between '2003-5-1' and '2003-6-1'date='2003-5-1'返回的只是date='2003-5-1 00:00:000'那一个时刻的数据!
ParamByName('ysrq1').AsInteger :=Trunc(d_ysrq1.Date) ;
parambyname('ysrq2').AsInteger :=Trucc(d_ysrq2.Date) + 1;
ParamByName('ysrq1').AsInteger :=Trunc(d_ysrq1.Date) ;
parambyname('ysrq2').AsInteger :=Trucc(d_ysrq2.Date) + 1;