0

Postgres 11 を使用して、同じクエリで一連の文字列関数を実行するにはどうすればよいですか。その後の文字列関数呼び出しは、以前に実行された文字列関数の結果に対して実行されますか?

ソーステーブルlabelsは次のようになります。

説明
12345_オレンジ
23456B_イエロー
34567C_ブルー

これを返すことができるビューを作成したいと思います:

説明 ID レート 名前
12345_オレンジ 12345 オレンジ
23456B_イエロー 23456 B 黄色
34567C_ブルー 34567 青い

ここで注意が必要なのは、列descが一貫していないことです。最初の行に示すように、値rateが存在する場合と存在しない場合があります。これを解決する最も簡単な方法は、最初に値を抽出idして列に格納する一連の 2 つの関数を使用することです。次に、その列から の値を抽出しますrate(存在する場合)。

これが私が試みているクエリです:

SELECT
    labels.descr,
    SPLIT_PART(labels.descr, '_', 1) as id
    , REGEXP_MATCHES(id, '[A-Za-z]')
FROM
    labels
;

idそれを実行すると、列が存在しないというエラーが表示されます。

誰かがこの問題を解決する方法を理解するのを手伝ってくれますか? この結果セットに対する将来のクエリを簡単にするために、ビューのみを使用してこれを解決したいと考えています。

さらに、上記が機能しない理由についての洞察をいただければ幸いです。ありがとうございました!

4

1 に答える 1

1

サブクエリを使用する必要があります。

SELECT labels_descr,
       id,
       REGEXP_MATCHES(id, '[A-Za-z]')
FROM (SELECT labels.descr,
             SPLIT_PART(labels.descr, '_', 1) as id
      FROM labels) AS subq;

または CTE:

WITH subq AS (
   SELECT labels.descr,
          SPLIT_PART(labels.descr, '_', 1) as id
   FROM labels)
SELECT labels_descr,
       id,
       REGEXP_MATCHES(id, '[A-Za-z]')
FROM subq;
于 2021-08-31T03:05:20.503 に答える