【问题标题】:Get column names which do not match a particular ending string获取与特定结束字符串不匹配的列名
【发布时间】:2014-07-31 00:16:07
【问题描述】:

我有一个结构如下的表:

abc_col | abcd | ab_col 
        |      |
        |      |

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

函数RIGHT() 可以做到这一点,但由于一些扩展限制,我不能使用RIGHT()。对于这个问题,我想形成一个不涉及任何标准 SQL 函数的 SQL 语句。

“标准函数”是指RIGHT()LEFT() 等函数。 LIKENOT LIKE 都可以。

【问题讨论】:

  • 您是在谈论列 names 还是 values。你写的列名就像那些是值。提供示例代码(即使它不工作),并且总是提供您的 Postgres 版本。另外,定义“SQL的标准函数”。
  • 我说的是列名而不是值。通过标准函数,我的意思是我不想使用像 RIGHT()LFET() 这样的函数来完成这项工作。
  • 那么,NOT LIKE 不是这些功能之一?
  • No NOT LIKE 不合格。我正在尝试不喜欢看看是否一切正常

标签: sql postgresql pattern-matching


【解决方案1】:

您必须从系统目录或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

此相关答案中的更多信息:

【讨论】:

    【解决方案2】:

    你应该找到 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';
    

    【讨论】:

      猜你喜欢
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 2019-08-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多