【问题标题】:Week of quarter - Oracle SQL季度周 - Oracle SQL
【发布时间】:2018-03-16 09:55:31
【问题描述】:

如何使用 Oracle SQL 获得季度周数?我使用简单的函数得到每月的星期和一年中的星期:

WITH SYSDATE_TABLE AS (
    SELECT to_date('01-06-2015', 'dd-mm-yyyy') as date_dt
    FROM DUAL
)
SELECT
    to_char(DATE_DT,'W') as WEEK_OF_MONTH,
    to_char(to_date(DATE_DT),'WW') as WEEK_OF_YEAR
FROM
    SYSDATE_TABLE;

我使用MOD 函数获得季度月份:

(CASE mod(to_number(to_char(DATE_DT, 'MM')), 3)
    WHEN 0 THEN 3
    WHEN 1 THEN 1
    WHEN 2 THEN 2
END) AS MONTH_OF_QUARTER

但我不知道如何获得季度周。有谁知道如何解决这个问题?

【问题讨论】:

  • 您认为“季度周”是什么时候开始的?总是在星期一(如 ISO-8601,分别为 TO_CHAR(..., 'IW'))或季度的第一天或 1 月 1 日的工作日(如 TO_CHAR(..., 'WW'))?

标签: sql oracle


【解决方案1】:

怎么样

select 1 + TO_CHAR(DATE_DT, 'WW') - TO_CHAR(TRUNC(DATE_DT, 'Q'), 'WW')
from SYSDATE_TABLE;

根据您的解释:每个季度的前 7 天是第一周。接下来的 7 天是第二周,以此类推。你可以试试这个:

select 1 + TRUNC( (DATE_DT - TRUNC(DATE_DT, 'Q')) / 7 )
from SYSDATE_TABLE;

【讨论】:

  • 我更精确地测试了您的解决方案,我认为存在错误。例如,01-07-2015 是今年第三季度的第一天,代码给出了很好的结果 - 1(季度第一周)。 02-07-2015 也是季度的第一周,但代码给出了结果 2。你可以在这里看到这个:imgur.com/a/xkxzg 我试图解决这个问题,但我不知道我该怎么做。你知道如何解决这个问题吗?
  • 这是我评论中的问题:您认为“季度周”是什么?由于您没有提供答案,我只是做了一个假设。
  • 好的,抱歉。 “季度周”是指季度中的简单编号天数。这就像“一个月中的一周”(我是这样制作的 - to_char(DATE_DT, 'W')),但是对于季度。每个季度的前 7 天是第一周。接下来的 7 天是第二周等。我知道这不是很清楚的解释,但我希望你明白我的意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
  • 2021-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
相关资源
最近更新 更多