注册 登录
编程论坛 ASP技术论坛

ASP中以下的情况要如何运用DateDiff

liny392 发布于 2009-11-29 20:50, 904 次点击
ACCESS数据表sheet1表里有字段:购置日期,文本型,数据类似为:“2005.9”,或“没填”或空值;使用年限,数字型,或者为数字,或者为空值.现在我要做的是查找:特定某个时间enddate(字符串类型)与购置日期之差,大于使用年限的记录(这里如果“使用年限”字段为空的话使用默认值5),

sql="select * from sheet1 where (InStr(现状,'已报废') <=0 or isnull(现状))"
sql = sql & " and ( (DateDiff('Y',replace(购置日期,'.','-'),"&enddate&")/365)>5 )"
(或者sql = sql & " and ( (DateDiff('yyyy',replace(购置日期,'.','-'),"&enddate&"))>5 )")
rs1.open sql,conn,1,1
运行结果是
Microsoft OLE DB Provider for ODBC Drivers (0x80040E21)
ODBC 驱动程序不支持所需的属性。
哪位大虾帮我看看应该怎么写这个语句,


如果改成下面的:
sql="select * from sheet1 where ( InStr(iif( isnull(现状),'',现状 ),'已报废') <=0 )"这句运行没错,532条记录
sql = sql & " and DateDiff('y',CDate( Mid(购置日期,1,Instr(购置日期,'.')-1) + '-' + Mid(购置日期,Instr(购置日期,'.')+1,len(购置日期)) + '-1' ),'"&enddate&"' )/365> IIf(isnull(使用年限),5,使用年限)"
编译没有错误.可是运行结果还是错的唉,查出来的记录是空的...(记录用肉眼判断,绝不是空的)
把DateDiff('y',CDate( Mid(购置日期,1,Instr(购置日期,'.')-1) + '-' + Mid(购置日期,Instr(购置日期,'.')+1,len(购置日期)) + '-1' ),'"&to_day1&"' )/365计算出来写在网页上结果又没错...
7 回复
#2
yms1232009-11-30 11:45
再加个查询条件限制购置日期不能为空呢?
#3
chenguoxing5172009-11-30 13:15
先判断这个购置日期是否为空?然后再执行sql语句
#4
liny3922009-11-30 14:33
sql = sql & " and DateDiff('y',CDate( Mid(购置日期,1,Instr(购置日期,'.')-1) + '-' + Mid(购置日期,Instr(购置日期,'.')+1,len(购置日期)) + '-1' ),'"&enddate&"' )/365> 5"这条改成五的话也是不对的啊。。。
#5
liny3922009-11-30 14:48
为什么这么少人帮我回答捏。。我发了好几个网站了,至今都没有解决。。。。人品不够
#6
yms1232009-11-30 18:18
加一个Where后的条件 and 购置日期<>''
#7
liny3922009-12-02 13:37
不会操作。。不让我结贴就不让我发言。。。不行的。如果有空值那会编译不通过。。所以。我特意把值全填满了,但是算出来的是空集
#8
不说也罢2009-12-02 21:36
ACCESS数据库既不支持replace函数,又不支持substring函数,所以楼主顶楼方法是绝对行不通的

楼主在四楼的贴子,方法可行,但前提就是存入[购置日期]的数据必须是固定长度的字符串,才好用left,mid,right,instr函数

象这样的问题,在存入数据库前,应当判断该值是否是发球日期时间格式

1