sql - PostgreSQL 中基于星期日的时差
问题描述
我有下表:
CREATE TABLE my_table
(
the_debt_id varchar(6) NOT NULL,
the_debt_paid timestamp NOT NULL,
the_debt_due date NOT NULL
)
INSERT INTO my_table
VALUES ('LMUS01', '2019-05-03 09:00:01', '2019-05-02'),
('LMUS01', '2019-06-03 10:45:12', '2019-06-02'),
('LMUS01', '2019-07-01 15:39:58', '2019-07-02'),
('LMUS02', '2019-05-03 19:43:44', '2019-05-07'),
('LMUS02', '2019-06-07 08:37:05', '2019-06-07')
我想要日期差异,但某些付款the_debt_due
日落在星期日(如 6 月 7 日)。如果付款日是星期天,我想在 上加 1 the_debt_due
,所以好的付款人的差是 0 或负数(预付)。
结果应如下所示:
SELECT (date(the_debt_paid) - the_debt_due) AS date_diff
FROM my_table
但是我不知道如何判断上一个查询是星期天是星期天。
预期产出
date_diff
1
0
-1
-4
0
请注意,第二行是 0,因为截止日期是星期日。
任何帮助将不胜感激。
解决方案
您可以使用(extract dow from ...)
获取给定日期的星期几,其中星期日是第 0 周。
这会做你想要的:
select
t.*,
date(the_debt_paid)
- the_debt_due
- (extract(dow from the_debt_due) = 0)::int AS date_diff
from my_table t
the_debt_id | the_debt_paid | the_debt_due | 日期差异 :------------ | :----------------- | :----------- | --------: LMUS01 | 2019-05-03 09:00:01 | 2019-05-02 | 1 LMUS01 | 2019-06-03 10:45:12 | 2019-06-02 | 0 LMUS01 | 2019-07-01 15:39:58 | 2019-07-02 | -1 LMUS02 | 2019-05-03 19:43:44 | 2019-05-07 | -4 LMUS02 | 2019-06-07 08:37:05 | 2019-06-07 | 0
推荐阅读
- html - 页面顶部的空白部分,即使使用 css media='print"
- python - 带组的 Python 绘图条形图
- python - BeamNG:VStates 未排队
- java - Java中类的大小
- angular - 将组件添加到 ngx-leaflet 标记弹出窗口
- node.js - Telegraf 和 Heroku 没有在 webhook [nodejs] 上发送第一个回复
- android - Firebase 在一定时间后无法连接数据库
- winapi - WM_PAINT 消息,BeginPaint 循环
- javascript - AWS JavaScript SDK - CloudDirectory 缺少身份验证令牌错误
- java - java vm 选项和 AWS::ECS::TaskDefinition