【问题标题】:Get last month data from first day until last day in Firebird在 Firebird 中获取从第一天到最后一天的上个月数据
【发布时间】:2017-12-15 04:57:54
【问题描述】:

我正在尝试查询 Firebird 以获取上个月的数据,从第 1 天到最后一天(30 或 31 取决于月份)。当我使用下面的代码时,它会给我从当前日期偏移的日期,例如 2017 年 11 月 14 日到 2017 年 12 月 13 日。

代码:

WHERE DATE >= DATEADD(MONTH,-1, CURRENT_TIMESTAMP(2)) AND DATE<= 'TODAY'

期望的输出是 11/01/2017 - 11/30/2017

正确的做法是什么?

【问题讨论】:

    标签: sql firebird


    【解决方案1】:

    我不使用 Firebird,但我已经相当广泛地使用了 PostgreSQL,我认为这应该可以工作:

    WHERE 
        DATE BETWEEN dateadd(month, -1, CURRENT_DATE - EXTRACT(DAY FROM CURRENT_DATE) + 1)
        AND CURRENT_DATE - EXTRACT(DAY FROM CURRENT_DATE)
    

    说明 CURRENT_DATE - EXTRACT(DAY FROM CURRENT_DATE) + 1 应该回到本月的第一天,而带有 -1 个月的 dateadd 应该回到上个月。然后,如果您介于 CURRENT_DATE - EXTRACT(DAY FROM CURRENT_DATE) 或换句话说 12/13/2017 - 13 天之间,那应该是 11 月的最后一天。越过我的手指。祝你好运。

    【讨论】:

    • 对于 Firebird,而不是 addmonth 使用 dateadd(-1, month, ...)(或 dateadd(-1 month to ...)
    • 我刚刚注意到我的评论中逗号分隔变体的参数顺序错误。似乎你做对了;)一个小问题是在比较时间戳时,它使用当前时间(所以取 2017-11-01 21:06 - 2017-11-30 21:06,而不是 00:00 - 23 :59)
    • @MarkRotteveel 这一切都很好。如果你不说什么,我就不会注意到。没用过火鸟,改天试试。现在,我正在尝试解决一些问题以提高我的声誉。再次感谢!
    • 嗨拉里,检查结果,我看到代码跳过了第 1 天,即从 11/02/2017 开始。如果我从代码 CURRENT_TIMESTAMP - EXTRACT(DAY FROM CURRENT_TIMESTAMP) + 1 中删除 +1,它将转到 2017 年 10 月 31 日。知道为什么会这样吗?
    • @JonathanLivingstonSeagull 它可能必须在 2017-11-01 和 2017-11-30 之间搜索(注意 11 月有 30 天),所以条目当前时间之前/之后超出范围。您需要对 Larry 的解决方案进行更多调整以包含这些内容。
    猜你喜欢
    • 1970-01-01
    • 2015-04-03
    • 2013-11-25
    • 2019-03-04
    • 2014-03-22
    • 1970-01-01
    • 2010-10-10
    • 2017-01-07
    • 1970-01-01
    相关资源
    最近更新 更多