【问题标题】:Run Postgres string function on column created in same query在同一查询中创建的列上运行 Postgres 字符串函数
【发布时间】:2021-08-31 02:32:29
【问题描述】:

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

我的源表labels 如下所示:

descr
12345_orange
23456B_yellow
34567C_blue

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

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 列不存在的错误。

有人可以帮助我了解如何解决这个问题吗?我希望仅使用视图来解决此问题,以便将来针对此结果集进行查询。

此外,我非常感谢您能深入了解为什么上述方法不起作用。谢谢!

【问题讨论】:

    标签: postgresql string-function


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多