帮忙!!时间查询问题,,,急需帮忙,明天交货!!
我的sqlserver数据库内容:2002-10-16 00:00:0000
现在我要查询大于2002-10-16的内容,并且少于2002-10-20,我用的是datepickerk控件选取时间,提交到数据库的是用date函数,那位兄弟可以帮忙?
问题点数:20、回复次数:15Top
1 楼softer(softer)回复于 2002-10-16 17:53:54 得分 0
用参数
select * from xxx where tdate<=:tstartdate and tdate>=:tenddate
将parameters.parambyname('tstartdate').value :=dtp.date
...
就可以搞定Top
2 楼xiaopan()回复于 2002-10-16 18:01:52 得分 0
刚才试了,不行Top
3 楼xiaopan()回复于 2002-10-16 18:05:46 得分 0
关键是sqlserver数据库自动加上了时间,我提供的参数只有日期Top
4 楼leaf_zhy(弄影)回复于 2002-10-16 18:09:55 得分 0
我一贯的做法是:把日期转换成字符串,然后截取所需要的,然后比较。Top
5 楼zmcpu(CPU)回复于 2002-10-16 18:11:15 得分 0
你给你的参数加上时间“00:00:00”不就的了Top
6 楼SQL5560(那一剑的风情)回复于 2002-10-16 19:15:26 得分 0
这个问题太简单了!!拒绝回答!!呵呵!!Top
7 楼xjspa(天涯)回复于 2002-10-16 19:21:11 得分 0
使用 encodetime()
将时间 组合成 dd-tt-mm-ss
再用softer(softer)兄 的方法Top
8 楼blazingfire(烈焰)(对.net极度憎恨中....)回复于 2002-10-16 19:48:47 得分 0
select * from xxx where tdate<=:tstartdate and tdate>=:tenddate
parameters.parambyname('tstartdate').AsDateTime:=dtp.date
Top
9 楼ITHeroMan(深谷老手)回复于 2002-10-16 20:10:35 得分 5
在数据库中对日期参数的传入处理,用字符串是最好的方式。
你在SQL_SERVER里把参数定义为字符串型(char(10)),
记住:Between...And...对字符串同样适用。
然后你在前台传时传入:
FormatDateTime('YYYY-MM-DD',[日期类型数据]);
即可。Top
10 楼hongqi162(失踪的月亮)回复于 2002-10-17 09:32:23 得分 5
修改一下就可以用!!!!
if RadioButton1.Checked=true then
begin
with datamodule1.JhdADOQuery do
begin
close;
sql.Clear;
sql.Add('select * from 进货表 where 进货日期>='+''''+formatdatetime('yyyy-mm-dd hh:mm:ss',datetimepicker1.datetime)+''''+' and 进货日期<='+''''+formatdatetime('yyyy-mm-dd hh:mm:ss',datetimepicker2.datetime)+'''');
open;
end;
end;Top
11 楼whw123(令狐冲)回复于 2002-10-17 11:46:38 得分 5
涉及到时间的都有这样的问题,再datepicker得到的时间系统会自动把后面的hh:mm:nn加上,得到的:2000-2-2 00:00:00,所以如果你要查询〉=2002- 10-6 and <2002-10-26的内容,只需要:where registerdate>= :vbegindate and registerdate<=:venddate
Parameters.ParameterbyName('vbegindate').value:= datepicker1.date;
Parameters.parameterbyname('venddate').value:= datepicker2.date+1;
open;
自己试一试!Top
12 楼whw123(令狐冲)回复于 2002-10-17 11:47:40 得分 0
对不起,上面的sql写得有些错误修改如下:
涉及到时间的都有这样的问题,再datepicker得到的时间系统会自动把后面的hh:mm:nn加上,得到的:2000-2-2 00:00:00,所以如果你要查询〉=2002- 10-6 and <2002-10-26的内容,只需要:where registerdate>= :vbegindate and registerdate<:venddate
Parameters.ParameterbyName('vbegindate').value:= datepicker1.date;
Parameters.parameterbyname('venddate').value:= datepicker2.date+1;
open;
自己试一试!
Top
13 楼andy_lim(andy)回复于 2002-10-17 12:02:51 得分 5
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select * from debit_imp where date between :d1 and :d2');
query1.ParamByName('d1').AsDate:=d1.Date;
query1.ParamByName('d2').AsDate:=d2.Date;
query1.Open;Top
14 楼zzg40280614(northsky)回复于 2002-10-17 15:00:33 得分 0
同意andy_lim(andy)
绝对可行Top
15 楼cdkey(cdkey)回复于 2002-10-17 17:24:06 得分 0
很简单,用int函数将时间去掉就行,只留下日期。
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select * from debit_imp where date>:d1 and date<:d2');
query1.ParamByName('d1').AsDate:=int(d1.Date);
query1.ParamByName('d2').AsDate:=int(d2.Date);
query1.Open;Top




