【问题标题】:Set MONTH in MYSQL based on another DATETIME value in the same row根据同一行中的另一个 DATETIME 值在 MYSQL 中设置 MONTH
【发布时间】:2021-03-16 12:30:17
【问题描述】:

我在同一张表的每一行中有两个日期字段。我试图弄清楚如何根据一个日期的 MONTH 是大于还是小于另一个日期来更新它。

这是我需要执行的操作:如果第二个日期大于第一个日期,则将第一个日期的 MONTH 设置为等于第二个日期的 MONTH。

所以如果第一个日期是“2021-03-16”,第二个日期是“2021-05-01”,我想将第一个日期更新为“2021-05-16”。

或者,为了不那么冗长的描述,我如何转换这个......

数据集:

id date_1       date_2
 1 2021-03-16   2021-05-01
 2 2021-03-16   2021-02-01

...进入这个...

id date_1       date_2
 1 2021-05-16   2021-05-01
 2 2021-03-16   2021-02-01

任何关于正确方法/语法的建议将不胜感激。

【问题讨论】:

    标签: mysql date


    【解决方案1】:
    UPDATE table
    SET first_date = CONCAT_WS('-', YEAR(first_date), 
                                    MONTH(GREATEST(first_date, second_date)), 
                                    DAY(first_date));
    

    【讨论】:

    • 完美!谢谢!
    【解决方案2】:

    您可以向date_1 添加两个日期的月份差数:

    UPDATE tablename
    SET date_1 = date_1 + INTERVAL MONTH(date_2) - MONTH(date_1) month
    WHERE date_1 < date_2
    

    请参阅demo
    结果:

    id date_1 date_2
    1 2021-05-16 2021-05-01
    2 2021-03-16 2021-02-01

    请注意,如果日期为 date_1 = '2021-03-31'date_2 = '2021-04-30',您的要求可能会失败,因为此 '2021-04-31' 不是有效日期。
    但上述查询也可以通过更改日期来工作。

    【讨论】:

    • 但在某些情况下差异会是一个月,在其他情况下可能是 2 或更多,所以我需要根据两个日期之间的差异添加间隔,所以不确定如何会工作的。
    • @JohnCallanan 差1个月时加1个月,差3个月时加3个月,差-2个月时加-2个月.你没有尝试我的代码吗?您不能只更改日期值中的月份。如果您尝试将 '2021-03-31' 更改为 '2021-04-31' ,它会使您的应用崩溃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 2021-11-05
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    相关资源
    最近更新 更多