2012-07-12 12 views
6

Tengo un campo de tiempo en mi base de datos, tiene el valor 22:05resta minutos de un valor de tiempo

Quiero restar 5 minutos. Cuando el campo es datetime, uso sub_date y funciona bien, pero no puedo obtenerlo con el campo de tiempo, recibo una advertencia que no sé cómo manejar;

mysql> SELECT scheduleFinalTime FROM clientSchedule WHERE clientScheduleID = 3; 
+-------------------+ 
| scheduleFinalTime | 
+-------------------+ 
| 22:05:00   | 
+-------------------+ 
1 row in set (0.00 sec) 

mysql> SELECT date_sub(scheduleFinalTime, INTERVAL 5 MINUTE) FROM clientSchedule WHERE clientScheduleID = 3; 
+------------------------------------------------+ 
| date_sub(scheduleFinalTime, INTERVAL 5 MINUTE) | 
+------------------------------------------------+ 
| NULL           | 
+------------------------------------------------+ 
1 row in set, 1 warning (0.00 sec) 

mysql> show warnings; 
+---------+------+------------------------------------------------------------+ 
| Level | Code | Message             | 
+---------+------+------------------------------------------------------------+ 
| Warning | 1264 | Out of range value for column 'scheduleFinalTime' at row 1 | 
+---------+------+------------------------------------------------------------+ 
1 row in set (0.00 sec) 

Gracias de antemano

Respuesta

9

MySQL tiene una función SUBTIME() para esto.

SUBTIME(expr1,expr2) 

SUBTIME() returns expr1 − expr2 expressed as a value in the same format as expr1. expr1 is a time or datetime expression, and expr2 is a time expression. 

mysql> SELECT SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002'); 
     -> '2007-12-30 22:58:58.999997' 
mysql> SELECT SUBTIME('01:00:00.999999', '02:00:00.999998'); 
     -> '-00:59:59.999999' 
2

Para aquellos que utilizan MySQL 4.x

SEC_TO_TIME(TIME_TO_SEC(t2) - TIME_TO_SEC(t1))