主题:菜鸟请教大师们,有关用SQL语句按时间查询的问题!
shuoshiren
[专家分:0] 发布于 2006-06-30 22:28:00
先给大师们鞠躬一个!
我想在DELPHI中通过SQL语句来查一个时间范围的数据,数据库是用ORACLE,其中有个字段的名称INSERTDATE,是DATE类型的字段,显示的最初形式是“2003-1月-28”形状的,后来被我该成:“2003-12-12 12:12:12”形状的,其中的代码:
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select * from test where insertdate>=cast('+''''+sfromdate+''''+' as date) and insertdate<= cast('+''''+stodate+''''+' as date)');
Query1.Open;
end;
查不出来啊,有错误,是不是SQL语言和所用的数据库有关啊?那么多的单引号,真麻烦
另外,SQL语言在ORACLE里的写法和DELPHI里面ADD后面的是不是也不一样啊?晕!
大师们帮帮小弟。
回复列表 (共4个回复)
沙发
nepenthe [专家分:460] 发布于 2006-07-01 13:29:00
请问 sfromdate和sfromdate中保存的数据格式是不是这样的啊?
sfromdate:='2002-02-01'
stodate:=:='2004-02-01'
如果是的我建议加上时间改成
sfromdate:='2002-02-01 00:00:00'
stodate:=:='2004-02-01 23:59:59'
板凳
shuoshiren [专家分:0] 发布于 2006-07-02 12:00:00
是00-00-00 00:00:00格式,不是字符类型的,是DATE类型的
3 楼
shuoshiren [专家分:0] 发布于 2006-07-02 17:59:00
再帮我看看怎么回师?
procedure TForm1.Button1Click(Sender: TObject);
var ayear1,amonth1,aday1,ahour1,amin1,ayear2,amonth2,aday2,ahour2,amin2 :integer;
afromdate,atodate: TDateTime;
sfromdate,stodate: string ;
begin
ayear1:=strtoint(combobox1.Text);
amonth1:=strtoint(combobox2.Text);
aday1:=strtoint(combobox3.Text);
ahour1:=strtoint(combobox4.Text);
amin1:=strtoint(combobox5.Text);
ayear2:=strtoint(combobox7.Text);
amonth2:=strtoint(combobox8.Text);
aday2:=strtoint(combobox9.Text);
ahour2:=strtoint(combobox10.Text);
amin2:=strtoint(combobox10.Text);
afromdate:=EncodeDateTime(ayear1,amonth1,aday1,ahour1,amin1,0,0);
atodate:=encodedatetime(ayear2,amonth2,aday2,ahour2,amin2,0,0);
sfromdate:=datetostr(afromdate);
stodate:=datetostr(atodate);
if afromdate>atodate then
showmessage('您输入的时间逻辑有误,请重新输入!')
else
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select * from test where insertdate>=cast('+''''+sfromdate+''''+' as date) and insertdate<= cast('+''''+stodate+''''+' as date)');
Query1.Open;
end;
end;
上面是代码
我还是不懂,里面的来龙去脉。
encodedatetime函数把微秒都算在内了,怎么sfromdate和stodate的值还是‘2001-01-01’格式的,怎么就没有后面的时分秒呢?如果改格式怎么该?
4 楼
shuoshiren [专家分:0] 发布于 2006-07-02 18:08:00
忘说了,上面的代码查不出来
有人说:查询时显示的时间格式,由会话环境决定,或者由用户定义,与数据库无关。
这是什么意思啊
到底怎么才能实现在DELPHI 中用SQL语句查询时间范围的数据呢?能不能不用字符类型的,直接用时间类型的?
DELPHI里的Tdatetime类型和ORACLE里DATE类型是不是不太一样,不太兼容啊,怎么老出现错误
我来回复