mysql 使用group_concat获取select * 所有字段列名拼接
mysql 获取 所有 SELECT group 拼接 列名 CONCAT
2023-09-27 14:25:36 时间
在使用数据库查询时,很多时候为了省事会使用select * from table ...方式处理,后续如果需要将* 号改成具体的列明时,对于字段特别多的表,如果通过手动一个一个写的话效率会比较低,可以使用group_concat内置函数进行逗号拼接获取*号对应的所有字段列名,如下所示:
查看表字段列:
desc order_info;
获取拼接字段列:
-- 默认逗号分隔,其中table_schema为数据库名,table_name为表名 select group_concat(COLUMN_NAME) as r from information_schema.columns where table_schema = "test" and table_name = "order_info";
如果表名需要别名的话,通过concat函数给列明加上即可:
-- 默认逗号分隔,加上别名前缀 select group_concat(concat("alia.", COLUMN_NAME)) as r from information_schema.columns where table_schema = "test" and table_name = "order_info";
如果想在逗号前加上一个空格的话可以设置分隔符:
-- 按制定分隔符分隔,逗号后加一个空格 select group_concat(COLUMN_NAME SEPARATOR ", ") as r from information_schema.columns where table_schema = "test" and table_name = "order_info";
若果不需要一些字段的话可以再where条件里加上不想要的字段列:
-- 过滤不想要的字段 select group_concat(COLUMN_NAME SEPARATOR ", ") as r from information_schema.columns where table_schema = "test" and table_name = "order_info" and COLUMN_NAME not in('create_date', 'pay_date');
以此方式便可很好地将*替换成左右字段名拼接效果
附:
存储过程:
BEGIN -- SELECT tb; set @tb_o = tb; SELECT SPLIT_STR(@tb_o, " ", 1) INTO tb; -- SELECT tb; set @sql = CONCAT('desc ', db, ".", tb); -- SELECT @sql; -- sql语句预处理 PREPARE stmt from @sql; -- sql语句执行 EXECUTE stmt; -- 要对一个预制语句解除分配,需使用DEALLOCATE PREPARE语句。尝试在解除分配后执行一个预制语句会导致错误。 deallocate PREPARE stmt;
-- 调用分割函数 SELECT SPLIT_STR(@tb_o, " ", 2) INTO alias; -- SELECT alias; if(alias is not null and LENGTH(trim(alias)) > 0) then select CONCAT(alias,".") INTO alias; end if; -- SELECT alias; select group_concat(CONCAT(alias, COLUMN_NAME) SEPARATOR ", ") as r from information_schema.columns where table_schema = db and table_name = tb; END
分割函数:
CREATE FUNCTION SPLIT_STR( x VARCHAR(255), delim VARCHAR(12), pos INT ) RETURNS VARCHAR(255) RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), delim, '');
使用:
# 若有别名则为表名+单空格+别名写法 set @tb = "user a"; SELECT DATABASE() INTO @db; call SQL_COLUMNS_APPEND(@db, @tb, "");
相关文章
- Mysql root账号general_log_file方法获取webshell
- mysql使用指南
- MySQL获取所有分类的前N条记录
- 在mysql获取如何去获取某个表的所有字段名
- 如何去掉 node.js 获取MySQL数据产生的RowDataPacket
- MySQL group_concat()函数
- MySQL时间类型及获取、展示处理
- mysql根据经纬度获取附近的商家
- mysql 获取最近一个月每一天
- WebSocket 实时更新mysql数据到页面
- Linux安装MariaDB(Mysql)和简单配置
- MySQL内置函数获取几天前的日期
- 【mysql】 获取几天前的日期
- mysql获取当前时间
- 常见电商项目的数据库表设计(MySQL版)
- mysql 配置 root 远程访问
- C#连接mysql数据库实现登陆注册界面
- MySQL · 性能优化· CloudDBA SQL优化建议之统计信息获取
- MySQL · 性能优化· CloudDBA SQL优化建议之统计信息获取
- mysql获取当天,昨天,本周,本月,上周,上月的起始时间
- mysql--随机获取一张表里的数据行;
- mysql 虚拟列导入报错1906说明
- http://bugs.mysql.com/bug.php?id=72123
- 如何用 ajax 连接mysql数据库,并且获取从中返回的数据。ajax获取从mysql返回的数据。responseXML分别输出不同数据的方法。
- 配置mysql允许远程连接的方法
- 【Mysql系列】存储过程实现自然周
- 【mysql】JDBC获取元数据缓慢