在MySQL表中,我有这些值00:00:00
和06:00:00
。
我需要在00:00:00
上退三小时,返回21:00:00
并在06:00:00
上添加三小时,然后返回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));
答案 1 :(得分:0)
由于实际上没有时间像' -00:00:03',你无法应用时间操作来做这件事。
如果你真的需要这个,我建议你
INT
类型,然后自行执行操作。DATETIME
类型,并尝试自行处理跨日问题。或者应用以下内容......
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
替换为您想要的任何内容。
它只是尝试将时间连接到日期时间字符串,并将其转换为datetime然后应用间隔操作。之后,它应用timediff来计算给定单位的经过时间(不要忘记%以获得正确的域)。最后连接三个不同之处。
这个答案有点难看,希望对你有帮助。