SQL语句查询时间范围(150分)

  • 主题发起人 主题发起人 seilfer
  • 开始时间 开始时间
S

seilfer

Unregistered / Unconfirmed
GUEST, unregistred user!
我的数据库是DBASE 得到的系统时间 是类似 02-8-14 这种
select s.TIME between :S1 AND :S2
s.time 是字符型就放的YY-MM-DD这种数据。然后S1 S2 是从两个EDIT中读出的数据也是
YY-MM-DD这种类型。
我按大富翁上说的试了N种方法,加# ,设置时间格式等等都不行。不是说时间类型出错
就是查不到结果 。
这样写可以, paramByname('S1').Asstring:=edit2.text;
paramByname('S2').Asstring:=edit3.text;
但是是比较的字符类型 像02-1-1 和02-11-1查询的时候就得不到正确结果了
谁能给个正确的做法啊,请帮帮忙,很急
 
试试这么写:
select * from s where s.time=>:s1 and s.time<=:s2
parambyname('s1').asdatetime:=StrToDate(edit2.text);
parambyname('s2').asdatetime:=StrToDate(edit3.text);
 
我给我刚做的一个软件的一段代码给你,看着办
sqlstr:=sqlstr+ ' where ldate>={'+formatdatetime('mm/dd/yy',datenew1.date)+'}'+
' and ldate<={'+formatdatetime('mm/dd/yy',datenew2.Date)+'}' ;

 
to thbin:
说时间类型不像配 我的是YY-MM-DD形式 如果是YYYY/MM/DD的就可以。问题是现在要
查询的都是YY-MM-DD形式
 
在操作系统的控制面板上调整区域(日期)选项
 
建议不要将日期型的值传入到数据库中去比对!
因为各种数据库的默认日期格式和所采用的字符集相关,而客户机上的日期格式又是可调
的,所以最好是将日期转化为字符串再传入到SQL语句,而语句中可以将字符串再转化为
日期(此时与日期型字段的格式肯定相同),或将日期型字段转化为字符型,通过字符串的
比较来实现日期的比较。
 
将Query控件中Parameters属性中的时间参数的DataType设为dtDate
 
同意 楼上的 楼上. 和 楼上的 观点.

你可以 要 求 用户 自己 设 ( 在进入 系统 时 检查 )

也要以 自己 设为 指定的 方式 .

因为. 客户 端的 日期 方式 很 方便 的.

如你是 改的 用户的 方式 . 最好 在 退出时 , 再 改回去.

因为, 有可能 他用 别的 软件 会 冲突.
 
请大家说清楚点.
我也遇到这个问题.
最好你们把你们写过的代码贴出来看一下.
谢谢了先
 
我用sql 做数据库的时候是这么做的,给你个参考吧!~~~~
With ADOquery1 do
begin
sql.cleal;
sql.add('select * from biao where (riqi>:p1) and (riqi<:p2)');
parameters.parabyname('p1').value :=Edit1.text;
parameters.parabyname('p1').value :=Edit2.text
active :=true;
OPen;
end;

其中最重要的 一点就:你edit.text 中的日期格式必须和你数据库中的日期格式一致
 
With ADOquery1 do
begin
sql.cleal;
sql.add('select * from biao where (riqi>:p1) and (riqi<:p2)');
parameters.parabyname('p1').value :=Edit1.text;
parameters.parabyname('p1').value :=Edit2.text
active :=true;
OPen;
end;

 
为什么不用adoquery.sql.text这个text属性呢
adoquery.sql.text:='select * from tablename where s1>='+#39+edit1.text+#39+' and
s2<='+#39+edit2.text+#39;
 
建议日期查询的日期输入最好采用datetimepicker
以下是我刚做的日期时间查询:
procedure Tf_ygjb_js.BitBtn3Click(Sender: TObject);
[purple][gold]var
nightintime,nightouttime,workovertime:Ttime[/gold];[/purple]
begin
If Edit1.Text<>'' then
begin
with f_dm do
begin
q_ygjb_js.Close;
q_ygjb_js.SQL.Clear;
q_ygjb_js.[red]SQL.Add('select * from DayOfShift where EmpNO=:EmpNO1 and RecDate=:RecDate1');[/red]
q_ygjb_js.Parameters.ParamByName('EmpNO1').Value:=Trim(Edit1.Text);
[red]q_ygjb_js.Parameters.ParamByName('RecDate1').Value:=Formatdatetime('yyyy-mm-dd',datetimepicker1.Date);[/red]
q_ygjb_js.Open;
If DBEdit9.text<>'' then
begin
[blue]nightintime:=strToDatetime(DBEdit8.text);
nightouttime:=strToDatetime(DBEdit9.text);
workovertime:=nightouttime-nightintime;
DBEdit10.Text:=Trim(IntToStr(round((workovertime*24*60)/60))+#32+'小时');[/blue]
//workovertime:=StrToDate(DBEdit10.text);
end;
If DBEdit9.Text='' then
begin
DBEdit10.Text:=trim('0'+#32+'小时');
end;
end;
end
else
begin
showmessage('请输入员工编号');
Edit1.Text:='';
end;

If f_dm.q_ygjb_js.Eof then
begin
showmessage('没有找到记录,请重新查询');
end;
end;
 
后退
顶部