计算当前日期的会计期间

*&---------------------------------------------------------------------*
*&      Form  get_kjny
*&---------------------------------------------------------------------*
*       计算当前日期的会计期间
*----------------------------------------------------------------------*
FORM get_kjny  CHANGING po_month_0l po_year.
  DATA: v_reljr LIKE t009b-reljr,  " 用于计算会计年度
        v_month_n(3) TYPE n,
        v_year(4) TYPE n.

  v_month_n = sy-datum+4(2).
  v_year = sy-dautm+0(4).

  SELECT SINGLE reljr poper
    INTO (v_reljr,v_month_n)
    FROM t009b
    WHERE periv = 'V9'
      AND bumon = v_month_n.

  po_month_0l = v_month_n.
  IF po_month_0l = '000'.
    po_month_0l = '001'.
  ENDIF.
  po_year = v_year + v_reljr.

ENDFORM.                    " get_kjny

### GBase 数据库中的季末日期计算 在 GBase 数据库中,虽然未提供专门针对季度末日期的内置函数,但可以通过组合其他日期时间函数来实现这一目标。以下是具体方法: #### 方法概述 可以利用 `DATE_FORMAT` 和 `LAST_DAY` 函数配合逻辑运算符完成季度末日期计算。 1. **获取当前日期所属季度的第一天** 使用以下 SQL 表达式可获得当前日期所在季度的第一天: ```sql SELECT MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL ((QUARTER(CURDATE()) - 1) * 3) MONTH AS quarter_start; ``` 2. **基于季度首日推算季度末日期** 利用 `MAKEDATE` 结合 `INTERVAL` 推导出季度末日期的方法如下: ```sql SELECT LAST_DAY(MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL ((QUARTER(CURDATE()) - 1) * 3) MONTH) AS quarter_end; ``` 这里的核心在于通过 `QUARTER()` 获取当前日期所在的季度编号,并将其映射到对应的月份范围[^1]。 3. **动态输入任意日期的情况** 如果需要支持传入特定日期而非仅限于当天,则可以用参数替换 `CURDATE()`: ```sql SET @input_date = '2023-10-15'; SELECT LAST_DAY(MAKEDATE(YEAR(@input_date), 1) + INTERVAL ((QUARTER(@input_date) - 1) * 3) MONTH) AS quarter_end_for_input; ``` 以上方式能够满足大多数场景下对于某给定时刻所处会计期间结束时间节点查询需求的同时保持良好兼容性和易读性特点[^2]。 ```sql -- 示例代码:计算当前日期的季度末日期 SELECT LAST_DAY( MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL ((QUARTER(CURDATE()) - 1) * 3) MONTH ) AS current_quarter_end; -- 示例代码:计算指定日期的季度末日期 SET @specific_date = '2023-04-18'; SELECT LAST_DAY( MAKEDATE(YEAR(@specific_date), 1) + INTERVAL ((QUARTER(@specific_date) - 1) * 3) MONTH ) AS specific_quarter_end; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值