在MySQL中添加时间戳的日期和时间

时间:2013-05-02 17:38:10

标签: mysql

我的表格中有3个字段:start_time: TIMESTAMPdays_prior: INTtime_open: TIME。我想从中检索start_time - days的值,将结果的时间部分设置为00:00:00,然后将时间添加到该值。

也就是说,原始时间戳可能类似于“2013-05-02 14:57:00”,天数为1,时间为'09:30:00',我想返回'2013-05-01九时30' 分00秒。

我意识到这可以通过拆分时间戳的日期部分,然后将其与时间连接来完成。但是,如果我想在同一个查询中使用结果作为where语句的一部分,那么我还需要将连接的结果作为时间戳。

理想情况下,我的查询类似于以下内容:

SELECT
    t1.id, 
    t1.start_time,
    CONCAT(DATE_SUB(DATE(t1.start_time), INTERVAL t2.days_prior DAY), ' ', t2.time_open) 
FROM
    t1, t2
WHERE
    t1.t2_id = t2.id

然而,这会产生如下结果:

1, 2012-10-30 18:00:00, 323031322d31302d33302030393a30303a3030

1 个答案:

答案 0 :(得分:1)

在处理日期和时间时,我会尽量避免使用字符串操作CONCAT。有适当的date and time func来处理这个问题。

尝试这是否适合您。它提供了一个真实的日期时间,所以如果你需要格式化它以进行演示,你需要添加它。

SELECT
    t1.id, 
    t1.start_time,
    MAKEDATE(YEAR(t1.start_time), DAYOFYEAR(t1.start_time)) - INTERVAL t2.days_prior DAY + INTERVAL t.2time_open HOUR_SECOND
FROM
    t1, t2
WHERE
    t1.t2_id = t2.id

SQLFiddle