首頁 >資料庫 >mysql教程 >如何在 Postgres 中動態產生 CASE 語句以進行基於日期的集合賦值?

如何在 Postgres 中動態產生 CASE 語句以進行基於日期的集合賦值?

Barbara Streisand
Barbara Streisand原創
2025-01-04 17:33:40836瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn