回 帖 发 新 帖 刷新版面

主题:菜鸟请教大师们,有关用SQL语句按时间查询的问题!

先给大师们鞠躬一个!
我想在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个回复)

沙发

请问 sfromdate和sfromdate中保存的数据格式是不是这样的啊?
  sfromdate:='2002-02-01'
  stodate:=:='2004-02-01'
如果是的我建议加上时间改成
  sfromdate:='2002-02-01 00:00:00'
  stodate:=:='2004-02-01 23:59:59'



板凳


是00-00-00 00:00:00格式,不是字符类型的,是DATE类型的

3 楼

再帮我看看怎么回师?

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 楼


忘说了,上面的代码查不出来

有人说:查询时显示的时间格式,由会话环境决定,或者由用户定义,与数据库无关。
 
这是什么意思啊

到底怎么才能实现在DELPHI 中用SQL语句查询时间范围的数据呢?能不能不用字符类型的,直接用时间类型的?

DELPHI里的Tdatetime类型和ORACLE里DATE类型是不是不太一样,不太兼容啊,怎么老出现错误

我来回复

您尚未登录,请登录后再回复。点此登录或注册