如何用 select 语句列出相似的列名?

How to list similar column names with select statement?

我的table有几个名字相似的列,比如year_1、year_2、year_3等,有没有简单的方法把它们都列出来不输入所有这些?我不能使用 select *,因为我不想要其他列。谢谢

您必须在存储过程中使用动态 nzplsql。虽然存储过程不容易 return tables,但是您可以让它很容易地输出一个 select 语句,该语句通过游标从 _v_relation_column 构建。在 bash 中捕获它并将其从 table 馈送到 nzsql 到 select。或者你可以 return 一个 reftable.

/* Stored procedure header. */
declare sql varchar;
declare col record;
begin_proc
  sql := 'select ';
  for col in select * from _v_relation_column where name = 'TABLE_NAME' loop
    if col.attname like 'year%'
      sql := sql || attname || ',';
    end if;
  sql := substring(sql,1,length(sql)-1); --To strip the last comma. Could probably be more elegant.
  sql := sql || ' from table_name;';
  raise notice '%',sql;
end_proc;
/* Stored procedure footer. */