【问题标题】:This SQL cannot cross a 'year end' boundary此 SQL 不能跨越“年终”边界
【发布时间】:2021-01-17 20:48:21
【问题描述】:

此 SQL 由 Smarty 文件调用,旨在下载输出的 .xlsx。除了 12 月(年末)报告外,它在所有月份都运行良好。 需要一些东西才能让它越过年终边界,但我不知道是什么。 ?谢谢。

SELECT user_id, cert_name, from_email, created_at, phone as role, 
        delivery, user_street, user_city, user_state, user_zip, 
        user_country_id, standard_fee, expedited_fee 
FROM support_tickets 
WHERE nature = 2 
AND user_id IS NOT NULL 
AND created_at BETWEEN '2012-12-05 04:00:01' and date(concat_ws('-', @year, @month + 1, 1)) 
ORDER BY created_at DESC  

【问题讨论】:

    标签: php mysql smarty


    【解决方案1】:

    使用日期算术,而不是字符串连接。

    如果您尝试在月份为 12 时添加 @month+1,则会得到第 13 个月,而不是下一年的第 1 个月。当前使用的日历中没有第 13 个月。

    对于您的情况,我建议使用 MySQL 中内置的 LAST_DAY() 函数。这将返回其参数当前月份的最后一个日期。

    例子:

    mysql> SELECT LAST_DAY('2020-12-05') AS last;
    +------------+
    | last       |
    +------------+
    | 2020-12-31 |
    +------------+
    

    我怀疑你想要同一个月的最后一天。

    如果你真的想要下个月的第一天,使用日期算术:

    mysql> SELECT LAST_DAY('2020-12-05') + INTERVAL 1 DAY AS next;
    +------------+
    | next       |
    +------------+
    | 2021-01-01 |
    +------------+
    

    【讨论】:

    • 谢谢比尔,我会试试这个.. 我忘了提到这个 SQL 的年份和月份来自 HTML 表单
    • 抱歉,每位客户一个问题。祝你有美好的一天!
    猜你喜欢
    • 2016-09-08
    • 1970-01-01
    • 2021-04-16
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 2015-09-09
    • 1970-01-01
    相关资源
    最近更新 更多