-
-
emilyxly 小试身手Lv3
发表于2018-12-3 10:24
悬赏1
已解决
12个回答
其实无论是<,或者<=,他自动生成过滤条件,都是正确的sql。<的话一般是+1,<=的话一般不加1
并不都是正确的,以下的写法日期没有加1天,但是<=变成<了
HR_STUFF_STRUCTURE_MANY_RPT.EFFDT_ST<=if(ASINT(DAY(today()))<=25,od(today(),'m-1;d=26'),if(ASINT(DAY(today()))>25,od(today(),'d=25')))
and HR_STUFF_STRUCTURE_MANY_RPT.EFFDT_END>=if(ASINT(DAY(today()))<=25,od(today(),'m-1;d=25'),if(ASINT(DAY(today()))>25,od(today(),'d=25')))
逻辑上是没有,但是sql本身就支持<=的写法,直接转换应该更合适一些吧,做这种转换了却不能保证所有情况都能转换准确,这样反而会出错呀
韦韬然 发表于 2018-12-3 10:35
厉害,刚看出来内层少写了个条件
HR_STUFF_STRUCTURE_MANY_RPT.EFFDT_ST<=if(ASINT(DAY(today()))<=25,od(today(),'m-1;d=25'),od(today(),'d=25')) and datetostr(HR_STUFF_STRUCTURE_MANY_RPT.EFFDT_END,'yyyymmdd')>=if(ASINT(DAY(today()))<=25,od(today(),'m-1;d=25'),od(today(),'d=25'))
这个没报错,这个转换和这个没关系,请看下改成这个表达式,日期的转换见下图

韦韬然 发表于 2018-12-3 10:35
厉害,刚看出来内层少写了个条件
另外,报表这两个字段限定条件的值是同一个表达式,EFFDT_ST带出的是不带时分秒的,EFFDT_END后的>=日期却带了系统时间对应的时分秒,这样才加了datetostr转换
emilyxly 发表于 2018-12-3 10:58
另外,报表这两个字段限定条件的值是同一个表达式,EFFDT_ST带出的是不带时分秒的,EFFDT_END后的>=日期 ...
那你的这个需求是需要时分秒还是不需要呢?
本帖最后由 emilyxly 于 2018-12-3 11:17 编辑
缱绻 发表于 2018-12-3 11:09
那你的这个需求是需要时分秒还是不需要呢?
2、第二个问题,是不需要的,或者加了也是00:00:00的格式,不影响我的计算结果也行,不过这个问题还是同一个表达式一个是00:00:00,一个到了系统时分秒。