2013-05-02 140 views
0

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

也就是说,原始时间戳可能类似'2013-05-02 14:57:00',日期为1,时间为'09:30:00',我想返回'2013-05- 01 09: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 
+0

对我的作品很好用.. [sqlFiddle(http://sqlfiddle.com/) – Manu 2013-05-02 17:57:43

+0

如何奇数可以填充的实际数据。对我来说工作正常,但在我的本地数据库,它不... ... – Elie 2013-05-02 18:24:55

+0

多一点调试 - 看起来问题与concat有关,因为我检查了每个值进入该函数,并且每个似乎是正确的。 – Elie 2013-05-02 18:29:42

回答

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

+0

谢谢!像魅力一样工作。仍然想知道为什么我的版本产生的东西看起来像垃圾,但目前对我来说更重要的是要有一个工作版本。 – Elie 2013-05-02 20:47:16