PSQL查询某一字段以外的其他字段的数据

有时候会遇到:查询过程,有一部分字段是不需要的,但是字段数量太多了,一个个输入目标字段,真的是太麻烦了,所以写了个函数,用于避开某一字段,自动生成一句命令。

CREATE OR REPLACE FUNCTION "get_sepcify_fileds"("reln" VARCHAR, "n_index" INT)
	RETURNS VARCHAR AS $BODY$BEGIN
	-- Routine body goes here...
	
	RETURN(SELECT
	string_agg ( NAME, ,  ) 
FROM
	(
	SELECT A.attname AS NAME 
	FROM
		pg_class AS C,
		pg_attribute AS A 
	WHERE
		C.relname = reln
		AND A.attrelid = C.oid 
	AND A.attnum != n_index
	AND A.attnum > 0
	) dd)
	
	;
END$BODY$
	LANGUAGE plpgsql

不过最后生成的结果依旧是一个表,只是方便了取出字段 还是需要手动再把这句命令加进去。所以还是很鸡肋。 由于我是自学的SQL,水平有限,我觉得这个函数有两处优化的空间,但是还没有实现出来: 1.如何将这句形成命令,融入到查询中,使得查询更加自动化、便捷化。 2.关于n_index,如何实现排除多个字段 一个变种: 可以把n_index从坐标换成对应的字段名字

CREATE OR REPLACE FUNCTION "get_sepcify_fileds"("reln" VARCHAR, "n_index" VARCHAR)  --字符串类型
	RETURNS VARCHAR AS $BODY$BEGIN
	-- Routine body goes here...
	
	RETURN(SELECT
	string_agg ( NAME, ,  ) 
FROM
	(
	SELECT A.attname AS NAME 
	FROM
		pg_class AS C,
		pg_attribute AS A 
	WHERE
		C.relname = reln
		AND A.attrelid = C.oid 
	AND A.attname != n_index    --字段名
	AND A.attnum > 0
	) dd)
	
	;
END$BODY$
	LANGUAGE plpgsql

如果大家有想法,或者成功实现了,或者优化了,请在评论区教教我,谢谢

经验分享 程序员 微信小程序 职场和发展