ホームページ > データベース > 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() 関数を利用できます。ポストグレ。 string_split() は、分割する入力文字列と区切り文字の 2 つの引数を受け取ります。

SELECT string_split(p_dates, ',');
SELECT string_split(p_sets, ',');
ログイン後にコピー

これにより、分割された日付とセットを含む 2 つの配列が返されます。

動的ケースの準備Statement

動的な 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
ログイン後にコピー

この動的を使用できます。更新クエリの CASE_STATEMENT を使用して、指定された日付範囲とセット名に従ってセット名を割り当てます。

以上がPostgres で日付ベースのセット割り当てのために CASE ステートメントを動的に生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート