时间数据类型的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
查询中做了一个更改。现在如果到小于从开始,它只会增加一天,如果我没弄错的话,根本不需要计算天。这只是一周中的一天。