今天在项目中,要查询一个表。这个表中有几十个字段。其中有很多前缀相同
这个该怎么办呢?查来查去,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;