sql—postgresql中基于星期日的时差

628mspwn  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(279)

我有下表:

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,因为到期日是星期天。
任何帮助都将不胜感激。

wkyowqbh

wkyowqbh1#

你可以用 (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

db小提琴演示:

the_debt_id | the_debt_paid       | the_debt_due | date_diff
:---------- | :------------------ | :----------- | --------:
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

相关问题