繁体   English   中英

Oracle SQL获得每月的第一天

[英]Oracle SQL to get first day of month

要求是输入日期应为每月的第一天。 条件是:

  1. 如果输入的日期在11月16日至11月30日之间,则第一天将是11月16日。
  2. 如果输入的日期在1月1日至11月15日之间,则第一天为11月11日。
  3. 对于其他所有月份,则应返回相应月份的第01天。

基于Tim Biegeleisen的解决方案,对其进行了简化,并避免了从日期到文本到日期的转换。 请注意使用TRUNC获取该期间的第一个日期。

SELECT
    CASE
        WHEN EXTRACT(MONTH FROM DATE_COL) = 11 AND EXTRACT(DAY FROM DATE_COL) >= 16
            THEN TRUNC(DATE_COL, 'MONTH') + 15
        ELSE TRUNC(DATE_COL, 'MONTH')
    END AS FIRST_OF_MONTH
FROM T1

我使用了一个冗长的CASE表达式来处理此问题,其中包含您在问题中提到的三种情况的逻辑。

SELECT CASE WHEN EXTRACT(month FROM date) = 11 AND
                 EXTRACT(day FROM date) >= 16
            THEN TO_DATE(EXTRACT(year FROM date) || '-11-16', 'yyyy-mm-dd')
            ELSE TO_DATE(EXTRACT(year FROM date) || '-' || EXTRACT(month FROM date) ||
                                 '-01', 'yyyy-mm-dd')
       END AS newDate
FROM yourTable

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM