【问题标题】:Create Custom Week Of Field SQL -- Oracle 12c创建自定义字段 SQL 周——Oracle 12c
【发布时间】:2020-10-13 21:08:18
【问题描述】:

这是用于 Oracle 12c 中的查询

我正在尝试创建一个“Week Of”字段,该字段将使用记录中存在的日期字段来为该记录分配一个反映一周开始的 Week Of 日期。我希望星期的开始是星期日,星期的结束是星期六。

举个例子说明我的意思:

metric_date        metric        value        week_of
01-oct-20          sales         45           27-sep-20
05-oct-20          sales         15           04-oct-20

字段的周始终是最近的星期日日期。我试图修改此 SQL Server 代码以在 Oracle 中工作,因为它是为类似目的而编写的:

SELECT DATEADD(DAY, -DATEDIFF(DAY, 0, [Order Date]) % 7, [Order Date]) AS [Week of]
FROM dbo.your_table_name

这是我在 Oracle 中复制代码的尝试:

SELECT distinct
metric_date,
mod(-(to_date('01-jan-1900','dd-mon-yyyy') - trunc(metric_date)),7) + metric_date as week_of

FROM dbo.table

但它没有返回我想要的结果。 您是否可以看到我在复制的代码中没有考虑到任何明显的差异?

【问题讨论】:

    标签: sql oracle date


    【解决方案1】:

    您可以使用 TRUNCIW 选项(与语言无关)将日期截断为星期一,然后将值移动 1 天:

    SELECT metric_date,
           TRUNC( metric_date + INTERVAL '1' DAY, 'IW' ) - INTERVAL '1' DAY
             AS sunday_of_week
    FROM   table_name
    

    其中,对于样本数据:

    CREATE TABLE table_name ( metric_date ) AS
    SELECT DATE '2020-10-01' + LEVEL - 1
    FROM   DUAL
    CONNECT BY LEVEL <= 14;
    

    输出:

    METRIC_DATE | SUNDAY_OF_WEEK :------------ | :------------- 01-OCT-20 | 20 年 9 月 27 日 02-OCT-20 | 20 年 9 月 27 日 03-OCT-20 | 20 年 9 月 27 日 04-OCT-20 | 04-OCT-20 05-OCT-20 | 04-OCT-20 06-OCT-20 | 04-OCT-20 07-OCT-20 | 04-OCT-20 20 年 8 月 8 日 | 04-OCT-20 20 年 9 月 9 日 | 04-OCT-20 10-OCT-20 | 04-OCT-20 20 年 10 月 11 日 | 11-OCT-20 20 年 10 月 12 日 | 11-OCT-20 20 年 10 月 13 日 | 11-OCT-20 20 年 10 月 14 日 | 11-OCT-20

    db小提琴here

    【讨论】:

      【解决方案2】:

      你可以使用next_day():

      select t.*, next_day(metric_date - 7, 'sunday')
      from mytable t
      

      请注意,next_day() 的第二个参数取决于语言。如果您的数据库配置为英语以外的其他语言,请使用周日的本地翻译。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-06
        • 2014-07-23
        • 1970-01-01
        • 1970-01-01
        • 2019-01-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多