运行 在同一查询中创建的列上的 Postgres 字符串函数

Run Postgres string function on column created in same query

如何使用 Postgres 11 在同一查询中执行一系列字符串函数,其中后续字符串函数调用针对先前执行的字符串函数的结果执行?

我的来源 table labels 看起来像这样:

descr
12345_orange
23456B_yellow
34567C_blue

我想创建一个可以return这个的视图:

descr id rate name
12345_orange 12345 orange
23456B_yellow 23456 B yellow
34567C_blue 34567 C blue

这里的一个棘手部分是 desc 列不一致。值 rate 有时存在,有时不存在,如第一行所示。解决这个问题的最简单方法似乎是使用一系列两个函数,首先我提取 id 的值并将其存储在列中。然后从该列中提取 rate 的值(如果存在)。

这是我正在尝试的查询:

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

当我执行时,我收到错误消息,指出 id 列不存在。

有人可以帮助我了解如何解决这个问题吗?我希望仅使用一个视图来解决这个问题,以便将来对该结果集的查询变得简单。

此外,如果能深入了解上述方法为何不起作用,我将不胜感激。谢谢!

你必须使用子查询:

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;