回 帖 发 新 帖 刷新版面

主题:[讨论]取出每个月最后一天的数据

我有一个表(表名:daily_data),内有相关数据,主要就是一个日期列(date),一个数值列。
我想通过条件语句筛选其中每个月最后一天的数据,我目前想到的办法如下:

use daily_data
set filter to INLIST(MONTH(date),4,6,9,11) AND DAY(date)=30 OR DAY(date)=31 OR MONTH(date)=2 AND DAY(date)=28
browse

但是问题是,闰年的情况没有考虑到。

另外,希望高人指点,看有没有更好地办法可以筛出这种数据

回复列表 (共11个回复)

沙发

主要就是一个日期列(date)
可以考虑有日期列(date)取下个月的1日,然后再减去1,就能实现每个月最后一天的数据啦!

年要判if(当前月<12,year(date),year(date)+1)

下个月就是if(当前月<12,当前月+1,1)



板凳

下面的筛选可以得到任何一个月的月末的日期
SET FILTER TO date=iif(MONTH(date)<12,CTOD(STR(YEAR(date),4)+"."+STR(MONTH(date)+1,2)+".01")-1,CTOD(STR(YEAR(date)+1,4)+".01.01")-1)

3 楼

1楼的大哥,我是用set filter to,这个后面好像不能用if语句了

4 楼

不是 IF 而是 IIF()
SET FILTER TO date=iif(MONTH(date)<12,CTOD(STR(YEAR(date),4)+"."+STR(MONTH(date)+1,2)+".01")-1,CTOD(STR(YEAR(date)+1,4)+".01.01")-1)

5 楼

请问2楼的专家,为什么我跑出来的结果是
 / / 

空的

研究出来了,如果我的日期是12月份的那就不能用您的这条语句了

6 楼

借用4楼作者:sywzs的代码
将date 改为系统当前date()
?iif(MONTH(date())<12,CTOD(STR(YEAR(date()),4)+"."+STR(MONTH(date())+1,2)+".01")-1,CTOD(STR(YEAR(date())+1,4)+".01.01")-1)
能出2009-09-30


 / / 

空的
所以估计你的date是空的没有数据

7 楼

嗯,不是空的,而是我第一个日期就是12月的,我用的是
SET FILTER TO int(MONTH(date))<>12 AND date=CTOD(STR(MONTH(date)+1,2)+"-01"+"-"+STR(YEAR(date),4))-1 OR int(MONTH(date))=12 AND date=CTOD(STR(MONTH(date),2)+"-01"+"-"+STR(YEAR(date),4))-1

谢谢你

8 楼

[quote]请问2楼的专家,为什么我跑出来的结果是
 / / 

空的

研究出来了,如果我的日期是12月份的那就不能用您的这条语句了[/quote]
设置一下系统开关
SET CENT ON
SET DATE ANSI

9 楼

use daily_data
dDate = {^2009-09-01} - 1 
set filter to 日期字段 = dDate
browse

本题思路:最后一天不好确定,但可以肯定的是每月的第一天是1号,那么次月的第一天的前1天就是本月的月末了~~~~

10 楼

t1=date()
t2=t1-day(t1)+32
t3=t2-day(t2)

我来回复

您尚未登录,请登录后再回复。点此登录或注册