【问题标题】:Update only Time in a mysql DateTime field仅更新 mysql DateTime 字段中的时间
【发布时间】:2020-06-29 21:51:11
【问题描述】:

如何仅更新 MySQL 中已有的 DateTime 字段中的时间?我希望日期保持不变。

【问题讨论】:

  • 我试过这个,但没有运气:UPDATE Entry SET entry_period_end_date = ADDTIME(entry_period_end_date, INTERVAL 6 Hour) WHERE TIME(entry_period_end_date) = '06:00:00';

标签: sql mysql


【解决方案1】:

试试这个:

UPDATE yourtable 
SET yourcolumn = concat(date(yourcolumn), ' 21:00:00')
WHERE Id = yourid;

【讨论】:

  • @user666 除了看起来 jp 在一年前给出了相同的答案,所以应该接受 imo jp 的答案。 (不过,这一切都已经很老了,马丁可能在添加任何正确答案之前就放弃了。)
【解决方案2】:

试试这个:

UPDATE t1 SET DateTimeField = CONCAT(DATE(DateTimeField),' 12:34:56');

【讨论】:

    【解决方案3】:
    UPDATE myTable
    SET myDateTime = ADDTIME(DATE(myDateTime), @myTimeSpan)
    WHERE id = @id;
    

    记录在 MySQl 日期函数 MySQL docs

    【讨论】:

    • SET date= ADDTIME(DATE(date), '02:00:00.999998') 将日期设置为 '0000-00-00 00:00:'
    • 似乎比投票率更高的答案更好,因为它不依赖字符串格式。
    【解决方案4】:

    我是这样解决的:

    UPDATE table
    SET myDateTime = CONCAT_WS(' ',DATE(myDateTime), CURTIME())
    WHERE id = @id;
    

    显然你应该用你想要的时间改变CURTIME()

    【讨论】:

    • 这很有帮助,我在网上搜索了这个声明。谢谢!
    【解决方案5】:
    UPDATE myTable
    SET myDateTime = ADDTIME(myDateTime, @myTimeSpan)
    WHERE id = @id;
    

    有关函数的确切语法,请参阅this

    【讨论】:

    • ADDTIME 函数将时间添加到现有时间。这意味着要使其正常工作,您希望 myDateTime 仅设置日期部分(时间部分为午夜)。
    【解决方案6】:

    试试这个:

    UPDATE sms 
    SET entry_period_end_date= entry_period_end_date+INTERVAL 6 Hour 
    WHERE TIME(entry_period_end_date) = '06:00:00';
    

    【讨论】:

      【解决方案7】:
      UPDATE `table`
      SET time = ADDTIME(time, INTERVAL 13 Hour);
      

      【讨论】:

        【解决方案8】:

        嗯,你所要求的完全是不可能的。日期和时间组件不能单独更新,因此您必须根据现有值计算新的 DateTime 值,以便替换整个值。

        【讨论】:

        • 好吧,可以这样做,而不是专门针对日期时间字段的时间部分,但您可以做一些事情来获得所需的结果。
        【解决方案9】:

        MySQL DEV 页面显示 subtimedifftime 等函数

        上面是支持所有帖子在 3 小时内的时间的示例代码:

        UPDATE tablepost SET datepost = SUBTIME( datepost , '0 3:0:0' );
        

        请注意,值 0 不会改变相应的字段。注意这段代码,先用select来测试这些功能。

        参考:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_subtime

        【讨论】:

          【解决方案10】:

          假设您有一个 DATE 字段和一个 TIME 字段并且想要将时间注入到日期中,试试这个:

          UPDATE mytable
          SET mydatefield = ADDTIME( DATE_FORMAT(mydatefield,'%Y-%m-%d 00:00:00'), mydatefield)
          WHERE myid = ...
          

          【讨论】:

            【解决方案11】:

            我以如下方式使用了ADDTIME

            之前在我的云服务器中,DateTime 设置为 UTC,但在将 DateTime 更改为 Asia/Kolkata 即 UTC 5:30 后,我希望在我的数据库表中反映相同。

            我想将 created_at 和 updated_at 列更新 5 小时 30 分钟。我做了以下

            更新表格的所有行

            UPDATE 
                products 
            SET 
                created_at = ADDTIME(created_at, '5:30:0'), 
                updated_at = ADDTIME(updated_at, '5:30:0') 
            

            如果您想更新所有记录,您可以省略 WHERE 条件,但因为我的新记录已更新为正确的值。所以只有我的 id 小于 2500 的行必须更新

            UPDATE 
                products 
            SET 
                created_at = ADDTIME(created_at, '5:30:0'), 
                updated_at = ADDTIME(updated_at, '5:30:0') 
            WHERE
                id < 2500;
            

            【讨论】:

              【解决方案12】:

              这对我有帮助。我首先将时间转换为分钟:凌晨 2:30 为 150。

              UPDATE lesson SET starts_at = DATE_ADD(Date(starts_at), INTERVAL 150 MINUTE)
              

              分钟对我来说已经足够准确了,尽管您可以使用其他单位:https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-add

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2017-09-19
                • 2012-11-23
                • 2014-01-27
                • 2011-08-08
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多