2016-01-13 29 views
0

在MySQL表中我有這些值00:00:0006:00:00在MySQL中添加子時間

我需要在00:00:00上分3小時,返回21:00:00並在06:00:00上加上3小時,返回09:00:00

我試過這個sql查詢,沒有成功。

請幫助我,謝謝你提前。

mysql> SELECT 
    SUBTIME('00:00:00', 3), 
    ADDTIME('06:00:00', 3); 
+------------------------+------------------------+ 
| SUBTIME('00:00:00', 3) | ADDTIME('06:00:00', 3) | 
+------------------------+------------------------+ 
| -00:00:03    | 06:00:03    | 
+------------------------+------------------------+ 
1 row in set 

mysql> 

#Edit 1

mysql> SELECT 
    '00:00:00' - INTERVAL 3 HOUR, 
    '06:00:00' + INTERVAL 3 HOUR; 
+------------------------------+------------------------------+ 
| '00:00:00' - INTERVAL 3 HOUR | '06:00:00' + INTERVAL 3 HOUR | 
+------------------------------+------------------------------+ 
| NULL       | NULL       | 
+------------------------------+------------------------------+ 
1 row in set 

mysql> 

#Edit 2

mysql> SELECT 
    DATE_ADD('00:00:00', INTERVAL 3 HOUR), 
    DATE_ADD('06:00:00', INTERVAL 3 HOUR); 

SELECT 
    SUBTIME('00:00:00', '03:00:00'), 
    ADDTIME('06:00:00', '03:00:00'); 
+---------------------------------------+---------------------------------------+ 
| DATE_ADD('00:00:00', INTERVAL 3 HOUR) | DATE_ADD('06:00:00', INTERVAL 3 HOUR) | 
+---------------------------------------+---------------------------------------+ 
| NULL         | NULL         | 
+---------------------------------------+---------------------------------------+ 
1 row in set 

+---------------------------------+---------------------------------+ 
| SUBTIME('00:00:00', '03:00:00') | ADDTIME('06:00:00', '03:00:00') | 
+---------------------------------+---------------------------------+ 
| -03:00:00      | 09:00:00      | 
+---------------------------------+---------------------------------+ 
1 row in set 

mysql> 
+0

檢查我編輯的答案 –

回答

0

它應該是

SELECT 
    TIME(SUBTIME(CONCAT(curdate(),' ','00:00:00'), 03:00:00)), 
    TIME(ADDTIME(CONCAT(curdate(),' ','00:00:00'), 03:00:00)); 
+0

謝謝,請參閱**#編輯2 **在我的第一個問題 - –

0

由於噸這裏實際上沒有時間像'-00:00:03',你不能應用時間操作來做這樣的事情。

如果你真的需要這一點,我建議你

  1. 更改列INT類型,自己做了手術。
  2. 將列更改爲DATETIME類型,並嘗試自行處理跨日問題。
  3. 或將以下...

    SELECT CONCAT(
        TIMESTAMPDIFF(
        HOUR, 
        STR_TO_DATE(CONCAT('2015/01/01 ', '00:00:00'), '%Y/%m/%d %H:%i:%s'), 
        STR_TO_DATE(CONCAT('2015/01/01 ', '00:00:00'), '%Y/%m/%d %H:%i:%s') - interval 3 hour 
    ) % 24, 
        ":", 
        TIMESTAMPDIFF(
        MINUTE, 
        STR_TO_DATE(CONCAT('2015/01/01 ', '00:00:00'), '%Y/%m/%d %H:%i:%s'), 
        STR_TO_DATE(CONCAT('2015/01/01 ', '00:00:00'), '%Y/%m/%d %H:%i:%s') - interval 3 hour 
    ) % 60, 
        ":", 
        TIMESTAMPDIFF(
        SECOND, 
        STR_TO_DATE(CONCAT('2015/01/01 ', '00:00:00'), '%Y/%m/%d %H:%i:%s'), 
        STR_TO_DATE(CONCAT('2015/01/01 ', '00:00:00'), '%Y/%m/%d %H:%i:%s') - interval 3 hour 
    ) % 60 
    ); 
    

    只需更換'00:00:00'3 hour到你想要的任何東西。

它只是試圖將您的時間連接到日期時間字符串,並將其轉換爲日期時間,然後應用間隔操作。之後,它應用timediff來計算給定單位的已用時間(不要忘記%來獲得正確的域)。最後連接這三個區別。

這個答案有點醜,希望對你有幫助。