起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 175|回复: 6

【结】查询时间差问题

[复制链接]
发表于 2008-5-8 14:19:56 | 显示全部楼层 |阅读模式
查询:系统当前日期 与 表中日期字段 的差值 大于 表中某一整数值字段。如:当前日期—出厂日期〉保质期。sql语句怎么写啊?
回复

使用道具 举报

发表于 2008-5-8 14:25:43 | 显示全部楼层
表达式中:日期字段减去一个整数时,表示减去多少天 如:当前日期 - 3  >  最长日期
更多的请参考数据库帮助文档(如:找+加号的用法)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-13 16:57:46 | 显示全部楼层
TSQLDataSet(DataSetBroker1.DataSet).SQLFilter   :=  ' (保质期) + (to_char(出厂日期,' + sysutils.Quotedstr('yyyymmdd') + '))-'+SysUtils.FormatDateTime('yyyymmdd',today)+'< 0' ;

today := business.Data.SysSrv.sysservice.time;

过滤条件有什么问题,为什么过滤得到的数据结果不对呢?
回复 支持 反对

使用道具 举报

发表于 2008-5-13 17:33:41 | 显示全部楼层
结果不对,要不传进去的值不对,要不跟精度有关,你检查一下
1、保质期 等这些字段存储的仅仅是日期吗?有时间在里面吗?如果有,可能是精度的问题
2、检查传进去的条件是否是你要的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-14 08:41:09 | 显示全部楼层
保质期,是整数,指天数。出厂日期数据类型是日期时间,表现类型是日期。

执行数据集的AfterScroll事件
Dialogs.showmessage(SysUtils.FormatDateTime( 'yyyymmdd',DataSetBroker1.DataSet.FieldByName.('BZQ').AsInteger+DataSetBroker1.DataSet.FieldByName('CCRQ').AsDateTime-today));
得到的结果如:18991203,19000125等。
如果把过滤条件的'< 0' 改为'< 19000000',结果还是一样。测试用的数据有一部分是保质期加上出厂日期大于当前日期的,可过滤不出来,问题出在哪里呢?
回复 支持 反对

使用道具 举报

发表于 2008-5-14 09:02:32 | 显示全部楼层
楼主先在查询分析器里调试,直到找到一个能解决的sql方案,再到平台实现来。
您说过滤不出来,现在不能确定是数据问题,还是过滤条件问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-14 10:10:52 | 显示全部楼层

ok!

已在数据集策略的过滤构造器里设置数据集约束的数据范围
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-12 17:05 , Processed in 0.042939 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表