【问题标题】:Oracle SQL: Query YTD for every yearOracle SQL:查询每年的 YTD
【发布时间】:2021-07-21 17:12:34
【问题描述】:

如何编写 Oracle SQL 查询以从日期小于或等于当年这一天的表中提取每条记录?

例如:

我的桌子:

date_field
01/01/2010
12/31/2010
01/01/2021
07/21/2021

如果查询在 2021 年 7 月 21 日运行,我的目标

date_field
01/01/2010
01/01/2021
07/21/2021

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您可以将月/日转换为字符串并进行比较:

    select t.*
    from t
    where to_char(date_field, 'MMDD') < to_char(sysdate, 'MMDD');
    

    【讨论】:

      【解决方案2】:

      这是一个潜在的解决方案。

        SELECT date_field
              FROM sample_data
             WHERE date_field <=
                   TO_DATE (
                        (   TO_CHAR (SYSDATE, 'MM/DD/')
                         || EXTRACT (YEAR FROM date_field))
                           ,'MM/DD/RRRR')
      

      【讨论】:

        【解决方案3】:

        另一种选择是提取月份和日期并将其作为数字进行比较:

        select date_field
        from your_table
        -- any earlier month
        where extract(month from date_field) < extract(month from sysdate)
        or (
          -- any earlier or same day in this month
          extract(month from date_field) = extract(month from sysdate)
          and extract(day from date_field) <= extract(day from sysdate)
        )
        order by date_field
        

        db<>fiddle

        使用这种方法或@Gordon 的字符串方法,您可能会从基于函数的索引中受益,但除非您的数据在年底时确实偏斜,否则它们可能无济于事。 p>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-21
          • 1970-01-01
          • 2011-11-04
          • 2016-06-17
          • 2022-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多