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

DateDiff为什么这样就取不到我想要的数据呢?

towering 发布于 2012-03-15 13:46, 563 次点击
话说我有这样的一个表格(SQL Server 2000):
id     YouXiaoQi(有效期)
1      2012-01-02  
2      2012-01-23
3      2012-01-13,2013-05-13
4      2012-01-13,2013-05-13,2015-10-18
5      2012-01-13
6      2016-12-13
...    ...
注:
NowStr=Year(now())&"-"&Right("0"&Month(now()),2)&"-"&Right("0"&Day(now()),2)'格式化日期格式为2012-02-13形式,不知道有没有用。


就是说有效期中字段中的时间不是定数,可以只有一个,最多可能有6个,不过都是由","分割,就是产品的到期时间。
我想用DateDiff取出截止到今天还有一个月就到期的数据。
如果有效期字段都是一个时间,那就很好解决了:
select id from 表格 where DateDiff(day,'"&NowStr&"',YouXiaoQi)<30 order by id asc

由于有效期字段可能不是一个,于是我想起来了:
曾经有个可以取数组中最大值的函数:
程序代码:
function GetMax(str)
num=split(str,",")
max=num(0)
for ii=0 to ubound(num)
if num(ii)>max then max=num(ii)
next
GetMax=max
end function


于是我就:

Sql="select id from 表格 where DateDiff(day,'"&NowStr&"','"&GetMax(YouXiaoQi)&"')<30  order by id asc"


可是,我木有成功......
我想这个问题只有神仙才可以解决,于是我就在这里等神仙的到来......
5 回复
#2
stock22012-03-15 15:54
cdate呢?转成日期格式试试
#3
ysf01812012-03-15 16:22

set rs = server.creatobject("adodb.recordset")
rs.open"select * from 表格 order by id asc",conn,1,1
do while not rs.eof
   if rs("YouXiaoQi") <> "" or isnull(rs("YouXiaoQi")) = false then  
      if DateDiff("d","&NowStr&",rs("YouXiaoQi"))<30  then
         '你要处理的事情
      end if
   end if
rs.movenext
loop
rs.close
set rs = nothing
conn.close
set conn = nothing



#4
towering2012-03-16 08:55
回复 2楼 stock2
用不用Cdate都一样,这货太弱。
而且在用DateDiff的时候应该是系统自动把字符转为日期的。
#5
towering2012-03-16 09:03
回复 3楼 ysf0181
版主这个貌似也不行吧?
如果YouXiaoQi是两个以上的话怎么办呢?
#6
towering2012-03-19 10:32
感谢版主 ysf0181
用的方法是正确的,我一开始没有理解。


这样就来了又一个问题了,我怎么才能统计出30天内到期的产品的总数呢?
用rs.recordcount是不行了吧?
谢谢!

[ 本帖最后由 towering 于 2012-3-19 10:39 编辑 ]
1