首页 > 数据库 > mysql教程 > 如何在 Postgres 中动态生成 CASE 语句以进行基于日期的集合赋值?

如何在 Postgres 中动态生成 CASE 语句以进行基于日期的集合赋值?

Barbara Streisand
发布: 2025-01-04 17:33:40
原创
825 人浏览过

How to Dynamically Generate a CASE Statement in Postgres for Date-Based Set Assignment?

分割给定的字符串

要分割给定的日期(p_dates)和集合(p_sets),我们可以利用 string_split() 函数Postgres。 string_split() 接受两个参数:要拆分的输入字符串和分隔符。

SELECT string_split(p_dates, ',');
SELECT string_split(p_sets, ',');
登录后复制

这将返回两个包含拆分日期和集合的数组。

准备动态案例语句

要准备动态 case 语句,我们可以循环遍历分割数组并使用CASE 表达式。

DECLARE
  p_dates TEXT := '2001-01-01to2001-01-05,2001-01-10to2001-01-15';
  p_sets TEXT := 's1,s2';
  CASE_STATEMENT TEXT := 'CASE ';
BEGIN
  FOR p_date IN SELECT * FROM string_split(p_dates, ',') LOOP
    CASE_STATEMENT := CASE_STATEMENT || 'WHEN given_dates BETWEEN ' || quote_literal(p_date) || ' ' || ...
  END LOOP;

  FOR p_set IN SELECT * FROM string_split(p_sets, ',') LOOP
    CASE_STATEMENT := CASE_STATEMENT || 'THEN ' || quote_literal(p_set) || ' '
  END LOOP;
  
  -- Complete Case Statement with ELSE clause to assign NULL if no match
  CASE_STATEMENT := CASE_STATEMENT || 'ELSE NULL' || ' END';
END;
SELECT CASE_STATEMENT;
登录后复制

生成的 CASE_STATEMENT 将是一个动态 case 表达式,它根据给定的日期范围分配适当的集名称。

CASE 
  WHEN given_dates BETWEEN '2001-01-01' AND '2001-01-05' THEN 's1' 
  WHEN given_dates BETWEEN '2001-01-10' AND '2001-01-15' THEN 's2' 
  ELSE NULL 
END
登录后复制

您可以在您的更新查询以根据给定的日期范围和集合名称分配集合名称。

以上是如何在 Postgres 中动态生成 CASE 语句以进行基于日期的集合赋值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板