MySQL 查询指定字段、自定义变量、动态执行SQL

今天在项目中,要查询一个表。这个表中有几十个字段。其中有很多前缀相同

这个该怎么办呢?查来查去,SQL 中没有查询某一些字段的语句,只能单独写一些语句来处理;

基本思路:对于MySQL数据库有 information_schema 库中存着数据该的一些基础信息。

1、从这个库中的 COLUMNS (记录各个表的所有字段)表中取出指定数据表的所有字段,再查询需要的字段,并存在变量中。

2、拼接SQL语句,并把变量带入(这里拼接完成后需要再赋到另一个变量)。

3、执行拼接的SQL语句。

##1、取出指定数据库:'hrm_test2'数据表:'hr_salary_accounting'的指定字段,并存在变量中.
SET @str := ( SELECT GROUP_CONCAT( s.column_name ) FROM information_schema.columns s WHERE TABLE_SCHEMA='hrm_test2' and s.table_name = 'hr_salary_accounting' AND s.column_name like CONCAT('ITEM', '%' ) );

##2、拼接SQL语句,并把变量带入
SET @v_sql = concat( 'select ', @str, ' from hr_salary_accounting' );

##3、这一句必需,不然下面查询就有问题
SET @e_sql = @v_sql;

##4、执行拼接的SQL语句
PREPARE stmt 
FROM
    @e_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

4、在使用中发现GROUP_CONCAT 是有默认长度(1024) ,发现超出部分会自动截取,这种情况下需要修改长度

SET GLOBAL group_concat_max_len=10240;
SET SESSION group_concat_max_len=10240;

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值