【问题标题】:SQL query - Get records between same day-month period but yearSQL查询 - 获取同一天-月期间但年份之间的记录
【发布时间】:2022-01-25 22:15:49
【问题描述】:

我有一个表格,其中包含从 2010 年到现在的记录,并带有一个日期时间字段。需要查找历年同期的记录。

我需要的示例: 来自输入表单的两个日期(D1 和 D2)之间的行:11-15(11 月 15 日)和 01-15(明年 1 月 15 日) 2021-11-15 至 2022-01-15 2020-11-15 至 2021-01-15 2019-11-15 至 2020-01-15 等等……

附加信息: 搜索日期来自表格,因此并不总是相同的。如果日期期间恰好在同一年,我的查询有效。

我尝试过的:

SELECT * FROM my_table  WHERE (DATEPART(MONTH, date_field)>=11 
AND DATEPART(DAY, date_field)>=15) 
AND (DATEPART(MONTH, date_field)<=1 
AND DATEPART(DAY, datefield)<=15)

但显然它不起作用.....

有什么想法吗?

【问题讨论】:

    标签: sql sql-server date between


    【解决方案1】:

    你可以通过计数来做到这一点

    with t0(n) as (
     select n 
     from (
        values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)
        ) t(n)
    ), tally as(
       select top(13) 2009 + row_number() over(order by t1.n)  year
       from t0 t1, t0 t2, t0 t3
    )
    select m.*
    from tally t
    join mytable m on m.date_field >= datefromparts(t.year, 11, 15)
         and date_field < datefromparts(t.year + 1, 1, 16);
    

    【讨论】:

      【解决方案2】:

      您需要更改 where 条件以产生预期的记录

      由于您想要某个日期/月份范围内的记录,因此记录可以属于一个条件或其他条件,因为 AND 记录无法满足 where 子句,因此不会获取任何内容

      SELECT * FROM my_table

      WHERE (DATEPART(MONTH, date_field) >=11 AND DATEPART(DAY, date_field)>=15

      OR (DATEPART(MONTH, date_field)

      这应该可以解决问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多