【问题标题】:Change timestamp date to today, but retain the hh:mm:ss part将时间戳日期更改为今天,但保留 hh:mm:ss 部分
【发布时间】:2014-02-20 02:23:40
【问题描述】:

我已声明列
time_stamp | timestamp| NO| PRI| CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP.

我有一些旧数据想用于测试 posrpoises。由于我的应用程序默认显示今天的数据,我想要一个 SQL 命令将 yyyy/nn//dd 部分更改为今天,同时保留 hh:mm:ss 部分。

由于该列的类型为timestamp,我怀疑我想要类似

UPDATE table SET time_stamp = time_stamp + (24*60*60* (now() - timestamp)) 或类似的,但我不确定确切的命令。

我可以停下来吗?


 show create table positions;

| positions | CREATE TABLE `positions` (
  `vehicle_id` int(11) NOT NULL,

  `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

  `latitude` double NOT NULL,
  `longitude` double NOT NULL,
  `distance_travelled` double NOT NULL,
  `address` varchar(128) NOT NULL,
  UNIQUE KEY `vehicle_id` (`vehicle_id`,`time_stamp`),
  CONSTRAINT `positions_ibfk_1` FOREIGN KEY (`vehicle_id`) REFERENCES `vehicles` (`vehicle_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |


select * from positions;

|          6 | 2013-10-22 17:24:57 | 1.33793333333333 | 103.755233333333 |               8483 | Pan Island Expressway, Singapore
                      |
|          6 | 2013-10-22 17:29:42 | 1.35208333333333 | 103.716433333333 |               7023 | 551 Jurong West Street 42, Singapore 640551
                      |
|          6 | 2013-10-22 17:34:42 | 1.35188333333333 | 103.715416666667 |                149 | 542 Jurong West Avenue 1, Singapore 640542

【问题讨论】:

    标签: mysql sql date unix-timestamp


    【解决方案1】:

    这样的事情可能会奏效:

    UPDATE table SET time_stamp = UNIX_TIMESTAMP(CONCAT(CURDATE(), ' ', TIME(FROM_UNIXTIME(time_stamp))))
    

    FROM_UNIXTIME() 会将 unix 时间戳转换为日期时间戳,然后您可以使用 TIME() 轻松提取时间部分。然后,您可以使用CONCAT()CURDATE() 将当前日期连接到它,后者获取当前日期,最后UNIX_TIMESTAMP() 将其转换回时间戳。

    【讨论】:

    • 答案真的没有太大差别。
    • FROM_UNIXTIME() 将 unix 时间戳转换为日期时间 (YYYY-MM-DD HH:MM:SS),所以它就在那里。该错误意味着您在该列上具有唯一索引或主键,并且该值具有重复条目。虽然我不认为这会影响事情,但我确实意识到我没有将最终结果转换回 unix 时间戳。试试看是否有帮助。如果没有,请检查您的索引和主键。
    • 您能显示 time_Stamp 列中的值吗?另外,您可以发布您在 create 语句中定义的数据类型吗?
    • 要么去掉`ON UPDATE CURRENT_TIMESTAMP`,要么不要自己手动更新列,因为这段代码已经为你做了。
    • 您可能还应该从您的唯一键中删除 time_stamp 列,因为它认为没有必要且明显有问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多