我的表中日期是用三个字段来表示的,分别是:年、月、日。现在我想查询一段时间范围内的记录来进行统计,不知应当如何实现,请给个思路。
解决方案 »
- 如何取得一个自画按钮的句柄,实现点击功能
- 用adoquery查询,如何得到查询记录数?
- 怎样在Adotable打开数据表时显示一个进度
- 如何删除dbgrid表格中所选中的一行?
- 如何字体五彩??
- 如何将数据库里的字段和数据导出成TXT文本格式???
- memo1.lines.Add((copy(j,1,11))+' '+fieldbyname('name').asstring)我希望这里面是TAB分隔符而不是空格,该怎么做?
- socket 客户端发送指令到服务端 服务端怎么反馈给客户端
- 用application.MessageBox语句写一个提问语句,怎样使默认的选择为否?
- 超酷菜单,类似WindowsXP的菜单,千万别错过。源码下载,Delphi,BCB都可用
- 不好意思,问个白痴问题,关于Stream的。顶者有分。
- 关于条形码机的接口
可以考虑用Encodedate
取出三个字段值后。
Encodedate(year,month,date)
begin
close;
sql.clear;
sql.add('Select * from table');
sql.add('where StartDate>=:Bdate and EndDate<=:EDate');
parambyname('Bdate').asdatetime:=Encodedate(Byear,BMonth,BDay);
parambyname('Edate').asdatetime:=Encodedate(Eyear,EMonth,EDay);
open;
end;
year > xxx and year < xxx and ...
如果是用CHAR来存的话,加上STRTOINT(XXX)就可以了吧
select * from 表 where CONVERT (datetime,'年字段'+'月字段'+'日字段')>2004-01-01
不过我没试过 一般不会做这变态的表结构:)
DELPHI也可以实现
首先给数据集里加一个计算字段 Date型 比如叫 MyDate
然后
在数据集的CalcFields里写
ADODATASET1.fieldbyname('MYDATE').asdatetime:=Encodedate(
ADODATASET1.fieldbyname('年').asinteger,
ADODATASET1.fieldbyname('月').asinteger,
ADODATASET1.fieldbyname('日').asinteger);然后在数据集里根据这个字段作为条件过滤数据
where a.year > xxx and a.year < xxx
and a.month > XXX and a.month < XXX
and a.day >xxx and a.day <XXX
where a.year between xxx and yyy and
a.month between xxx and yyy and
a.day between>xxx yyy
where a.year between xxx and yyy and
a.month between xxx and yyy and
a.day between>xxx and yyy少了个and