我有一个像这样结构的表:
abc_col | abcd | ab_col
| |
| |
有些列名以_col
结尾,有些则没有。 abc
或ab
或abcd
是随机列名称的开头。我想选择不以_col
结尾的列的名称。
函数RIGHT()
可以执行此操作,但由于某些扩展约束,我无法使用RIGHT()
。我想形成一个SQL语句,该语句不涉及任何SQL的标准函数。
通过"标准功能"我的意思是RIGHT()
,LEFT()
等功能。 LIKE
或NOT LIKE
没问题。
答案 0 :(得分:2)
您必须从系统目录或information schema中检索列名。使用系统目录表pg_attribute
:
SELECT attname
FROM pg_attribute
WHERE attrelid = 'mytbl'::regclass
AND attname NOT LIKE '%_col'
AND NOT attisdropped -- no dropped (dead) columns
AND attnum > 0; -- no system columns
此相关答案中的更多信息:
答案 1 :(得分:0)
您应该找到information_schema
SELECT table_name,
column_name,
REPLACE(column_name, '_1', '')
FROM information_schema.columns
WHERE column_name LIKE '%_col'
AND table_name = 'matches'
AND table_schema = 'public';