时间数据类型的Mysql TIMESTAMPDIFF返回负值

时间数据类型的Mysql TIMESTAMPDIFF返回负值,mysql,Mysql,这是我的问题 SELECT r.*,TIMESTAMPDIFF(MINUTE,r.from, r.to) / 60 as hours from RestaurantOpeningHours r; 结果如下: id rId day from to createdAt updatedAt hours 142054 1 1 11:00:00 14:00:00 2020-09-07 19:52:30

这是我的问题

SELECT r.*,TIMESTAMPDIFF(MINUTE,r.from, r.to) / 60 as hours from RestaurantOpeningHours r;
结果如下:

id     rId day  from        to          createdAt           updatedAt           hours
142054  1   1   11:00:00    14:00:00    2020-09-07 19:52:30 2020-09-07 19:52:30 3.0000
142055  1   2   13:15:00    03:15:00    2020-09-07 19:52:30 2020-09-07 19:52:30 -10.0000
预期结果:

id     rId day  from        to          createdAt           updatedAt           hours
142054  1   1   11:00:00    14:00:00    2020-09-07 19:52:30 2020-09-07 19:52:30 3.0000
142055  1   2   13:15:00    03:15:00    2020-09-07 19:52:30 2020-09-07 19:52:30 14.0000
因为从
13:15:00
03:15:00
相差14小时。始终假定
字段上的值是将来的值。
from
to
字段是
时间
数据类型


什么是正确的查询将返回我的预期结果?

您的模式是什么以及
day
字段的含义并不清楚。 但要想得到你想要的,你只需要考虑到
一天

SELECT
    r.*, TIMESTAMPDIFF(HOUR, r.from, r.to  + INTERVAL (CASE WHEN r.to < r.from THEN 1 ELSE 0 END) DAY) AS hours
FROM
    RestaurantOpeningHours r
;
我更改了
hours
计算,并通过更改
timestamdiff
的第一个参数并删除60除法,从分钟中删除了获取小时数

如果你已经提供了一些创建和填充脚本,那也会很棒

这是我的:

CREATE TABLE RestaurantOpeningHours(
  `id` INT PRIMARY KEY,
  `rId` INT,
  `day` INT,
  `from` TIME,
  `to` TIME,
  `createdAt` TIMESTAMP,
  `updatedAt` TIMESTAMP
);

INSERT INTO RestaurantOpeningHours VALUES
  (142054, 1, 1, "11:00:00", "14:00:00", "2020-09-07 19:52:30", "2020-09-07 19:52:30"),
  (142055, 1, 2, "13:15:00", "03:15:00", "2020-09-07 19:52:30", "2020-09-07 19:52:30")
;

现在还不清楚您的模式是什么,以及
day
字段的含义是什么。 但要想得到你想要的,你只需要考虑到
一天

SELECT
    r.*, TIMESTAMPDIFF(HOUR, r.from, r.to  + INTERVAL (CASE WHEN r.to < r.from THEN 1 ELSE 0 END) DAY) AS hours
FROM
    RestaurantOpeningHours r
;
我更改了
hours
计算,并通过更改
timestamdiff
的第一个参数并删除60除法,从分钟中删除了获取小时数

如果你已经提供了一些创建和填充脚本,那也会很棒

这是我的:

CREATE TABLE RestaurantOpeningHours(
  `id` INT PRIMARY KEY,
  `rId` INT,
  `day` INT,
  `from` TIME,
  `to` TIME,
  `createdAt` TIMESTAMP,
  `updatedAt` TIMESTAMP
);

INSERT INTO RestaurantOpeningHours VALUES
  (142054, 1, 1, "11:00:00", "14:00:00", "2020-09-07 19:52:30", "2020-09-07 19:52:30"),
  (142055, 1, 2, "13:15:00", "03:15:00", "2020-09-07 19:52:30", "2020-09-07 19:52:30")
;

Mysql TIMESTAMPDIFF函数的工作原理如下

TIMESTAMPDIFF(单位,datetime_expr1,datetime_expr2);

什么是区间值? MySQL间隔值主要用于日期和时间计算。创造 如果是间隔值,则使用以下表达式

(间隔扩展单元) 例:间隔1天

最后我使用了if函数

我希望此代码可以帮助您解决问题

SELECT
    r.*, TIMESTAMPDIFF(HOUR, r.from, r.to  + Interval if(r.from<r.to,0,1) day) AS hours
FROM
    RestaurantOpeningHours r
;
选择

r、 *,TIMESTAMPDIFF(HOUR,r.from,r.to+Interval if(r.fromMysql TIMESTAMPDIFF函数的工作方式如下)

TIMESTAMPDIFF(单位,datetime_expr1,datetime_expr2);

什么是区间值? MySQL间隔值主要用于日期和时间计算 如果是间隔值,则使用以下表达式

(间隔扩展单元) 例:间隔1天

最后我使用了if函数

我希望此代码可以帮助您解决问题

SELECT
    r.*, TIMESTAMPDIFF(HOUR, r.from, r.to  + Interval if(r.from<r.to,0,1) day) AS hours
FROM
    RestaurantOpeningHours r
;
选择

r、 *,TIMESTAMPDIFF(小时,r.从,r.到+间隔,如果(r.fromday是
integer
中的一天名称,星期天是1,星期一是7..我在
SELCELC
查询中做了一个更改。现在如果
小于
from
,它只会增加一天,如果我理解正确,根本不需要计算
天。这只是一周中的一天。天是
integer中的一天名称,星期天是1,星期一是7..我在
SELCELC
查询中做了一个更改。现在如果
小于
开始,它只会增加一天,如果我没弄错的话,根本不需要计算
天。这只是一周中的一天。