给定一个具有命名方案的表,如下所示:
示例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"。
答案 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;