2013-05-02 141 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