postgresql 如何删除年-周范围?

hrirmatl  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(2)|浏览(140)

假设Postgres表mytable中有一些数据:
| 年|(iso)周|
| - -----|- -----|
| 二〇二一|五十|
| 二〇二一|五十一|
| 二〇二一|五十二|
| 2022| 1|
| 2022| 2|
| ......这是什么?|......这是什么?|
| 2022|五十二|
| 2023年|1|
| 2023年|2|
| ......这是什么?|......这是什么?|
| 2023年|24(本周)|
我需要删除介于(2021,51)和(2023,1)之间的记录。这意味着预期结果应为:
| 年|(iso)周|
| - -----|- -----|
| 二〇二一|五十|
| 2023年|2|
| ......这是什么?|......这是什么?|
| 2023年|24(本周)|
什么样的sql查询可以过滤这个?

syqv5f0l

syqv5f0l1#

根据我的实验建议,下面的方法会起作用
DELETE FROM mytable
WHERE (year > 2021 AND year < 2023)
   OR (year = 2021 AND week >= 51)
   OR (year = 2023 AND week <= 1);
guz6ccqo

guz6ccqo2#

这可以通过组合年和周来完成,将它们转换为整数,然后应用一个标准,其中:

DELETE FROM mytable
WHERE (year, week) IN
(
  select year, week
  from (
    select *, concat(year, to_char(week, 'fm00'))::int as yearWeek
    from mytable
  ) as s
  where yearWeek between concat(2021, to_char(51, 'fm00'))::int 
                       and
                       concat(2023, to_char(1, 'fm00'))::int
)

Demo here

相关问题