NEXT_DAY在水晶报告中



Crystal Reports使用的语法中是否有类似Oracle "NEXT_DAY"函数的东西?

如果测试的日期时间介于星期五@ 9:00pm和星期一@ 9:00am之间,我正在尝试编写一个公式以输出下一个星期一@ 9:00am。

到目前为止,我有

IF DAYOFWEEK ({DATETIMEFROMMYDB}) IN [7,1]
    OR (DAYOFWEEK({DATETIMEFROMMYDB}) = 6 AND TIME({DATETIMEFROMMYDB}) in time(21,00,00) to time(23,59,59))
    OR (DAYOFWEEK({DATETIMEFROMMYDB}) = 2 AND TIME({DATETIMEFROMMYDB}) in time(00,00,00) to time(08,59,59))
THEN ...

我知道我可以编写单独的 IF 语句来为周五、周六、周日、周一的每个语句执行不同数量的 DateAdd,但如果我可以通过将所有这些归为一个来保持简洁,我会更喜欢它。我已经要添加额外的规则,如果日期时间在其他工作日的营业时间之外,所以我想尽可能多地防止它成为一个非常杂草丛生和丑陋的公式。

由于我知道没有CR等价物,你可以作弊并从Oracle数据库中借用NEXT_DAY()函数。为此,可以创建一个 SQL 表达式,然后输入如下内容:

-- SQL Expression {%NextDay}
(SELECT NEXT_DAY("MYTABLE"."MYDATETIME", 'MONDAY')
 FROM DUAL)

然后,您可以直接在公式中使用它:

IF DAYOFWEEK ({MYTABLE.MYDATETIME}) IN [7,1]
    OR (DAYOFWEEK({MYTABLE.MYDATETIME}) = 6 AND TIME({MYTABLE.MYDATETIME}) in time(21,00,00) to time(23,59,59))
    OR (DAYOFWEEK({MYTABLE.MYDATETIME}) = 2 AND TIME({MYTABLE.MYDATETIME) in time(00,00,00) to time(08,59,59))
THEN DateTime(date({%NextDay}),time(09,00,00))

或者,更好的方法是将所有逻辑填充到 SQL 表达式中,并完全取消公式。

  • 考虑星期天是 1

  • 前 7 个是我们想要支持的一周

    7 = 1 周14 = 2 周

  • 最后一个数字 (1) 是 1 表示星期日,2 表示星期一,3 表示星期二

上周日 1周前今天 - 7 + ( 7 - 平日(今天) )+1

上周一 2周前今天 - 14 + ( 7 - 平日(今天) )+2

所以这两个公式给了我上周星期一和上周星期天。

EvaluateAfter({DATETIMEFROMMYDB}) ;
If DayOfWeek ({DATETIMEFROMMYDB}) In [crFriday,crSaturday,crSunday,crMonday]
then
IF DayOfWeek ({DATETIMEFROMMYDB}) In [crFriday] 
AND TIME({DATETIMEFROMMYDB}) >= time(21,00,00)
then //your code here
Else if Not(DayOfWeek ({DATETIMEFROMMYDB}) In [crFriday] )
AND (TIME({DATETIMEFROMMYDB}) >= time(00,00,00) AND TIME({DATETIMEFROMMYDB}) <= time(23,59,59))
then //your code here
Else if DayOfWeek ({DATETIMEFROMMYDB})In [crMonday] 
AND TIME({DATETIMEFROMMYDB}) < time(09,00,00)
then //your code here

相关内容

  • 没有找到相关文章