标记与表名类似的查询的列名

时间:2017-01-09 16:44:40

标签: sql database netezza

给定一个具有命名方案的表,如下所示:

示例1:

INFO_APPLICATION_B

CORRESPOND_U|OBJECTIVE_U|APPLICATION_U|DENIED_U|ACCEPTED_U|

示例2:

INFO_CITIZEN_B

REFUGEE_U|INCOME_U|EDUCATION_U|CITIZEN_U|

我想将表中与列名相似的列名(如示例中所示)过滤掉。准确地说,在第一个例子中,理想情况下,第3列由于其与其各自的表名的相似性而被标记。在示例2中遵循相同的想法,其中将标记列号4。

我如何在SQL中执行此操作?

我想要一个输出,它不显示名称类似于表名的列:

CORRESPOND_U | OBJECTIVE_U || DENIED_U | ACCEPTED_U |

注意" APPLICATION_U"不再存在,因为它类似于表名" APPLICATION_B"。

1 个答案:

答案 0 :(得分:0)

循环_v_relation_column并确定该列是否包含表格中的文字。

我怀疑你的意思是“相似”,但我只是按照你的榜样。

create or replace find_similar_columns(varchar(any))
    returns varchar
    language nzplsql
    begin_proc
        declare
            input_table alias for $1;
            included_columns varchar;
            delimiter varchar;
            column record;
            filtered_column varchar;
        begin
            delimiter := '|';
            included_columns := '';
            for column in 
                select 
                    attname 
                from 
                    _v_relation_column 
                where 
                    name = input_table order by attnum
                loop
                filtered_column := replace(column.attname, '\_U', '');
                if input_table not like '%' || filtered_column || '%' then
                    included_columns := included_columns || delimiter || column.attname;
                end if;
            end loop;
        end;
    end_proc;