【发布时间】:2021-07-15 13:08:27
【问题描述】:
我想找出NOW() 和时间戳列之间的时间差。
在计算时差时,只需要计算从上午 9 点到下午 5 点的营业时间和工作日。
例如对于第一条记录2021-04-21 07:56:36,如果现在是2021-04-21 10:00:00,则必须从上午9点开始计算时差,此时结果为1小时,如下所示:
(NOW() - created_at) - ('2021-04-21 09:00'::timestamp - created_at) AS timediff
对于2021-04-19 21:55:46 的第二条记录,结果将是从2021-04-20 09:00 到2021-04-20 17:00 和2021-04-21 09:00 到2021-04-21 10:00:00 的8+1 小时组成的9 小时
对于2021-04-17 14:22:05 的第三条记录,它将是 17 小时,由 8+8+1 小时组成。
样本数据:
+----------------------------------+---------------------+
| id | created_at |
+----------------------------------+---------------------+
| 9d38ea6e7077400db310cfc47b31d482 | 2021-04-21 07:56:36 |
| 9d38ea6e7077400db310cfc47b31d481 | 2021-04-19 21:55:46 |
| 9d38ea6e7077400db310cfc47b31d480 | 2021-04-17 14:22:05 |
| 9d38ea6e7077400db310cfc47b31d479 | 2021-04-18 22:43:44 |
+----------------------------------+---------------------+
期望的结果:
+----------------------------------+---------------------+----------+
| id | created_at | timediff |
+----------------------------------+---------------------+----------+
| 9d38ea6e7077400db310cfc47b31d482 | 2021-04-21 07:56:36 | 01:00:00 |
| 9d38ea6e7077400db310cfc47b31d481 | 2021-04-19 21:55:46 | 09:00:00 |
| 9d38ea6e7077400db310cfc47b31d480 | 2021-04-17 14:22:05 | 17:00:00 |
| 9d38ea6e7077400db310cfc47b31d479 | 2021-04-18 22:43:44 | 17:00:00 |
+----------------------------------+---------------------+----------+
【问题讨论】:
标签: postgresql datetime timestamp date-arithmetic