【问题标题】:Postgres select concatenated column namePostgres 选择连接的列名
【发布时间】:2017-04-12 14:13:32
【问题描述】:

举个例子,一个表month有五列:

  • 月.周1
  • month.week2
  • month.week3
  • month.week4
  • month.week5

col的数量由函数决定

EXTRACT(WEEK FROM NOW()) - EXTRACT(WEEK FROM DATE_TRUNC('month', NOW())) + 1

如何选择列colX?这就是我目前所拥有的

SELECT month.week || (
    EXTRACT(WEEK FROM NOW()) 
    - EXTRACT(WEEK FROM DATE_TRUNC('month', NOW())) + 1
)::text 
FROM month

但这给了我错误

错误:month.week 列不存在 SQL 状态:42703

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    用例陈述

    SELECT
        CASE WHEN (week expresion) = 1 THEN month.week1
             WHEN (week expresion) = 2 THEN month.week2
             WHEN (week expresion) = 3 THEN month.week3
             WHEN (week expresion) = 4 THEN month.week4
             ELSE month.week5
        END as WeekValue
    FROM month
    

    SELECT
        CASE (week expresion) 
             WHEN 1 THEN month.week1
             WHEN 2 THEN month.week2
             WHEN 3 THEN month.week3
             WHEN 4 THEN month.week4
             ELSE month.week5
        END as WeekValue
    FROM month
    

    【讨论】:

    • 或者只是CASE (week expression) WHEN 1 THEN ... WHEN 2 ...以避免重复(非常长的)周表达式。
    【解决方案2】:

    动态 sql 示例:

    t=# create table so58(i int,w1 text);
    CREATE TABLE
    t=# create or replace function so59(_n int) returns table (i int,w text) as $$begin
    return query execute format('select i,w%s from so58',_n);
    end;
    $$ language plpgsql;
    CREATE FUNCTION
    t=# select * from so59(1);
     i | w
    ---+---
    (0 rows)
    

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多