【问题标题】:Change date while preserving time在保留时间的同时更改日期
【发布时间】:2016-04-16 14:13:49
【问题描述】:

我需要更新 MySQL 表中的一堆日期,同时保留日期的时间部分。比如我是这样加入的:

select crt.StartTime, crt.EndTime, crs.WorkDate
from CrewReportTimesheet crt
join CrewReportSummary crs
on crt.CrewReportSummaryID = crs.CrewReportSummaryID

crt.StartTimecrt.EndTime 的日期错误但时间正确。 crs.WorkDate 有正确的日期,但没有时间。因此,对于与上述连接匹配的所有记录,我需要将crt.StartTimecrt.EndTime 设置为与crs.WorkDate 相同的日期,同时保留这些列中的时间。

以下是不良数据的示例:

注意前 2 列带有时间戳。时间对,日期不对。单元格 A1 和 B1 应该是 2015-12-19,就像 C1 一样。以此类推。

最好的方法是什么?提前致谢。

【问题讨论】:

  • 你能展示一些示例数据吗?只有几行你想要的结果是什么?
  • @JorgeCampos 我发布了一些示例数据。

标签: mysql sql


【解决方案1】:

您可以使用UPDATE 语句和INNER JOIN 来选择要更新的记录。

UPDATE CrewReportTimesheet crt
    INNER JOIN CrewReportSummary crs
    ON crt.CrewReportSummaryID = crs.CrewReportSummaryID
SET crt.StartTime = TIMESTAMP(DATE(crs.WorkDate), TIME(crt.StartTime)),
    crt.EndTime   = TIMESTAMP(DATE(crs.WorkDate), TIME(crt.EndTime))

如果您想改用CONCAT(),可以尝试以下方法:

UPDATE CrewReportTimesheet crt
    INNER JOIN CrewReportSummary crs
    ON crt.CrewReportSummaryID = crs.CrewReportSummaryID
SET crt.StartTime = CONCAT(DATE(crs.WorkDate), ' ', TIME(crt.StartTime)),
    crt.EndTime   = CONCAT(DATE(crs.WorkDate), ' ', TIME(crt.EndTime))

【讨论】:

  • 我认为这不是他想要的,这就像连接日期和时间来创建新的开始和结束当然是日期时间
  • 看看here。似乎 MySQL 有一个 TIMESTAMP 函数可以完成繁重的工作,我宁愿依赖它而不是格式化,后者容易出错。
  • @JorgeCampos 您可以使用 concat() 和 date_format() 用 sql 发布答案吗?我将不胜感激。
  • @SweatCoder Tim 已经做到了:上面的评论:stackoverflow.com/a/4125957/460557
  • 宾果游戏。非常感谢蒂姆和豪尔赫。仅供参考:我使用了第二次更新,没有尝试第一次。
猜你喜欢
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 2022-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多