获取与特定结束字符串不匹配的列名

时间:2014-07-31 00:16:07

标签: sql postgresql pattern-matching

我有一个像这样结构的表:

abc_col | abcd | ab_col 
        |      |
        |      |

有些列名以_col结尾,有些则没有。 abcababcd是随机列名称的开头。我想选择不以_col结尾的列的名称。

函数RIGHT()可以执行此操作,但由于某些扩展约束,我无法使用RIGHT()。我想形成一个SQL语句,该语句不涉及任何SQL的标准函数。

通过"标准功能"我的意思是RIGHT()LEFT()等功能。 LIKENOT LIKE没问题。

2 个答案:

答案 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';