0

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

我的源表labels如下所示:

描述
12345_橙色
23456B_黄色
34567C_蓝色

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

描述 ID 速度 姓名
12345_橙色 12345
23456B_黄色 23456 黄色
34567C_蓝色 34567 C 蓝色的

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