指定された文字列の分割
指定された日付 (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 サイトの他の関連記事を参照してください。