Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

到期查询

宋ST  发表于:2012-02-13 11:21:14  
复制

我是新手,想对“产品信息”表字段中多个有效期进行查询,如果这个有效期踞当前日期在30天内,就会被查询出来。用ACCESS的SQL出如下:

 

SELECT*

FROM 产品信息
WHERE (((DateDiff('d',[生产厂家执照有效期],Now()))<=30)) OR (((DateDiff('d',[厂家许可证有效期],Now()))<=30)) OR (((DateDiff('d',[医疗器械产品注册证有效期],Now()))<=30)) OR (((DateDiff('d',[销售方授权有效期],Now()))<=30)) OR (((DateDiff('d',[联系人委托书有效期],Now()))<=30));

 

但是运行起来却无法实现查询目标,为什么,请各位帮忙~急。

 

Top
纵云梯 发表于:2012-02-13 11:50:27
发个例子上来帮你改。

瞿丽忠 发表于:2012-02-13 12:08:17

是不是每个 "有效期" 都有数值? 如果有空值可能会出错



宋ST 发表于:2012-02-13 12:48:57

现在把我的东西发上去,有大神能帮忙么。

点击下载此附件

纵云梯 发表于:2012-02-13 15:14:56

点击下载此附件

 

朋友将你的SQL改成:

 

SELECT* FROM 产品信息
WHERE (((DateDiff('d',[生产厂家执照有效期],Now()))<=30)) OR (((DateDiff('d',[厂家许可证有效期],Now()))<=30)) OR (((DateDiff('d',[医疗器械产品注册证有效期],Now()))<=30)) OR (((DateDiff('d',[销售方授权有效期],Now()))<=30)) OR (((DateDiff('d',[联系人委托书有效期],Now()))<=30));

 

改成:

 

SELECT* FROM 产品信息
WHERE ABS(DateDiff('d',[生产厂家执照有效期],Now()))<=30 OR ABS(DateDiff('d',[厂家许可证有效期],Now()))<=30 OR ABS(DateDiff('d',[医疗器械产品注册证有效期],Now()))<=30 OR ABS(DateDiff('d',[销售方授权有效期],Now()))<=30 OR ABS(DateDiff('d',[联系人委托书有效期],Now()))<=30;

 

应该就是你想要的结果了。



纵云梯 发表于:2012-02-13 15:32:38

原因分析:

DateDiff('d',[联系人委托书有效期],Now())对比的是两个日期之间的天数,

 

例如(假设:Now()=2012-2-13):

(1)DateDiff('d',#2011-1-3#,Now())=406

(2)DateDiff('d',#2012-1-28#,Now())=16

(3)DateDiff('d',#2012-2-1#,Now())=12

 

你的条件是DateDiff('d',#某日#,Now())<=30,那么以上三个例子(2)合(3)是符合要求的,但你不要忘记当你用DateDiff将一个还未发生的日期与Now()对比时会返回一个负数。例如:DateDiff('d',#2012-6-20#,Now())=-128。那么它同样符合你的DateDiff('d',#某日#,Now())<=30条件设定范围,但这显然不是你想要的,因为你只想要当前30天以内的天数(显然2012-6-20要大于2012-2-13很多)。

 

要避免这一点把DateDiff('d',#某日#,Now())<=30改为ABS(DateDiff('d',#某日#,Now()))<=30即可。

 

ABS([数值]):为求该[数值]的绝对值,即:ABS(3)=3 和 ABS(-3)=3



总记录:5篇  页次:1/1 9 1 :