7

データベースに時間フィールドがあり、値は22:05です。

5分引いてみたいです。フィールドが日時の場合、sub_dateを使用して正常に機能しますが、時間フィールドでは取得できません。処理方法がわからないという警告が表示されます。

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)

前もって感謝します

4

2 に答える 2

9

Mysqlには、このためのSUBTIME()関数があります。

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'
于 2012-07-12T08:28:14.540 に答える
2

mysql4.xを使用している場合

SEC_TO_TIME(TIME_TO_SEC(t2) - TIME_TO_SEC(t1))
于 2015-11-17T18:19:18.630 に答える