首页 >数据库 >mysql教程 >如何使用 Case 语句根据日期范围动态更新表的集名称?

如何使用 Case 语句根据日期范围动态更新表的集名称?

Patricia Arquette
Patricia Arquette原创
2024-12-29 13:39:11455浏览

How to Dynamically Update a Table's Set Name Based on Date Ranges Using a Case Statement?

使用分割日期和集进行更新的动态案例语句

问题:

给定两个参数 p_dates 和 p_sets,分别包含日期范围和集合名称,目标是准备一条动态 SQL case 语句,根据给定的日期范围使用适当的集名称更新表的 set_name 列。

解决方案:

1.分割日期:

要将 p_dates 参数分割为各个日期范围,请使用 string_to_array() 函数并以逗号 (,) 作为分隔符:

SELECT unnest(string_to_array(p_dates, ',')) AS date_range;

2.拆分集:

类似地,要将 p_sets 参数拆分为单独的集名称,请使用相同的技术:

SELECT unnest(string_to_array(p_sets, ',')) AS set_name;

3。准备动态 Case 语句:

使用分割日期和集合,将它们动态连接成一个 case 语句:

CASE
  WHEN given_dates BETWEEN split_part(date_range, 'to', 1)::date
                     AND split_part(date_range, 'to', 2)::date
  THEN set_name
  ELSE NULL
END

实现:

要更新table_name表,请使用以下SQL语句:

UPDATE table_name
SET set_name = (
  CASE
    WHEN given_dates BETWEEN split_part(date_range, 'to', 1)::date
                           AND split_part(date_range, 'to', 2)::date
    THEN set_name
    ELSE NULL
  END
)
FROM split_dates
JOIN split_sets
  ON 1 = 1;

好处:

这种动态方法允许根据更改的参数进行灵活更新,消除了静态 case 语句的需要,并提供了更通用的解决方案用于日期范围和设置操作。

以上是如何使用 Case 语句根据日期范围动态更新表的集名称?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn