finereport帆软通过日和周进行查表

查询某天是当年第几个星期的函数

to_char(date,'iw')

iw的算法为星期一至星期日算一周,且每年的第一个星期一为第一周,

例如:20050101为星期六,所以用iw的算法是前年的53周,而20050103之后才是第一周的开始。

还有ww,应该用的较少

ww的算法为每年1月1日为第一周开始,date+6为每一周结尾

  例如20050101为第一周的第一天,而第一周的最后一天为20050101+6=20050107

特殊情况

如果要查询'yyyy-iw'形式的年-周,一年中最后几天和前几天的可能会出错,跨年那一周,哪年占的天数多,该周就算在哪一年,也就是有可能算在去年最后一周,也可能算在当年第一周

比如

select to_char(to_date('2018-12-31','yyyy-mm-dd'),'yyyy-iw') from dual;

结果为2018-01,因为12-31号算在2019 年第一周,而截取年份是2018

解决办法:哪年占的天数多,该周就算在哪一年,可以推断出周四那天是决定性的一天。如果周四是去年的,那么该周就是去年最后一周,如果周四是今年的,那么该周就是今年第一周

查询语句:查出周四对应的年份,与周数进行拼接

SELECT
    to_char( next_day( trunc( to_date( '2018-12-31', 'yyyy-mm-dd' ), 'iw' ), '星期四' ), 'yyyy' ) || '-' || to_char( to_date( '2018-12-31', 'yyyy-mm-dd' ), 'iw' ) 
FROM

多个字段去重

distinct 字段1,字段2

表示选取多个字段拼接的一条记录,不重复的所有记录,如distinct year, month

分组和去重 

分组后查询字段数量count(),是该小组内的数量

查询字段为某值的数量 count(decode(字段名,值名,1))。如果分组过,则查询的是该小组内的数量

        如:count(decode(name,'张三',1))

分周和日进行查询所需的数据

上面已经说了如何查询当前日期所在周数,那么在帆软里面创建图表,想要通过日和周进行查询,该如何查询出需要的数据呢?

解决办法:查询两个表,一个表中字段是正常的日期,一个表中将日期替换为周数,通过union all 进行连接,并为表分别设置字段flag,值为day和week,以便在finereport里进行区分

 finereport帆软控件设置

在帆软数据库查询里面添加参数进行查询条件限制

将上述联立的表当做整体,添加数据集查询条件:
where 1=1  ${if (len(flag==0),"","and flag in('"+flag+"')")}

通过参数flag选择日或者周查询

flag控件选择单选控件,控件值选择自定义,设置day和week

where 1=1 表示条件永真,防止没有之后的参数条件时,where 多出而导致出错;len(area)==0 表示参数 area 为空;"and 货主地区='"+area+"'" 中间的 area 表示取参数值,'+' 为字符串拼接符号。

分别在两个表中添加时间限制条件:
where to_char(date,'yyyy-mm-dd') between '${s_date}' and '${e_date}'

通过参数s_date 和e_date 设置控件选择开始日期和结束日期 

预览时后面是空白内容

预览报表时发现后面一半内容是空白页。

解决办法:在设计界面,表格的下方选中部分重新清除表格内容,

产生原因:这可能是之前设计表的时候,下面的内容没有清理干净,因为之前我是从第二行开始设计表,后面剪切到了第一行,可能留下了表格格式。

insert模式

在写代码时遇到光标后边的字被我输入的字逐个替代的问题,询问朋友后才知道是不小心切换到了覆盖模式,笔者还是第一次遇到这个问题

点击键盘的insert即可切换到插入模式

选择文本框时,自动删除粘贴内容首尾空格

SELECT * FROM 订单 

where 1=1

${if(len(订单ID)==0,"","and 订单ID LIKE '%"+ trim(订单ID)+ "%'")}

${if(len(货主地址)==0,"","and 货主地址 LIKE '%"+ trim(货主地址)+ "%'")}

like                 模糊匹配

trim()               函数用于删除字符串的头尾空白符,空白符包括:空格、制表符 tab、换行符等

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值