You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何快速查询表中除expr_前缀列外的所有列?

问题

我有一张包含约50列的数据表,其中有5列的名称以expr_开头。我希望获取除这些expr_开头列之外的所有列,能否无需逐一指定所需列来快速实现?

我想使用类似这样的简洁语句(不用逐个列名):

SELECT
 * FROM TABLE WHERE column_name NOT LIKE '%EXPR%'

而不是这种需要逐一列出所有列名的写法:

SELECT
a, b, c, d, e, f, g, h, .... FROM table
解决方案

SQL本身没有直接支持SELECT *排除指定列的语法,你示例里的写法是错误的——WHERE子句是用来过滤行数据,而非筛选列。不过可以通过查询系统表动态生成目标列名列表,再组装成查询语句,以下是主流数据库的实现方法:

MySQL/MariaDB

查询系统表生成排除expr_开头列的列名拼接字符串:

SELECT GROUP_CONCAT(column_name SEPARATOR ', ')
FROM information_schema.columns
WHERE table_schema = '你的数据库名称'
  AND table_name = '你的表名称'
  AND column_name NOT LIKE 'expr\_%';

执行后复制输出的列名串,替换到SELECT语句中即可完成查询。

SQL Server

通过系统视图生成目标列名:

SELECT STRING_AGG(name, ', ')
FROM sys.columns
WHERE object_id = OBJECT_ID('你的数据库名.dbo.你的表名')
  AND name NOT LIKE 'expr_%';

将结果中的列名列表粘贴到SELECT后,就能得到排除指定列的查询语句。

PostgreSQL

利用information_schema和字符串聚合函数生成列名:

SELECT string_agg(column_name, ', ')
FROM information_schema.columns
WHERE table_schema = 'public' -- 你的模式名,默认通常为public
  AND table_name = '你的表名称'
  AND column_name NOT LIKE 'expr_%';

复制生成的列名到SELECT语句中,即可实现需求。

进阶技巧

如果需要频繁执行这类排除列的查询,可以把上述生成逻辑封装成存储过程或函数,每次调用直接获取目标列名列表,进一步简化操作。

内容的提问来源于stack exchange,提问作者takotsubo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:37:35