MySQL可直接使用的查询表的列信息(实现方案),
目录
- 背景
- 实现方案
- 模板SQL
- 如何查询列
- 如何转大写
- 如何获取字符位置
- 如何拼接字段
- SQL适用场景
背景
最近产品找来,想让帮忙出下表的信息,字段驼峰展示,每张表信息show create table全部展示,再逐个粘贴,有点太耗费时间,本篇记录快速方法,方便备查。
实现方案
第一步、确定下划线【_】的位置,可使用LOCATE函数;
第二步、找到下划线后第一个字符;
第三步、各个区域截取【下划线前的字符+下划线后的第一位要大写+剩余字符串小写】,使用CONCAT拼接。
实现效果如下所示。

模板SQL
可直接使用的模板SQL,只需要将【tb_order】改成所要统计的表即可,如下所示
SELECT
COLUMN_NAME AS `数据元素`,
LOCATE('_', COLUMN_NAME, 1) + 1 AS `下划线第一个位置`,
UCASE(SUBSTRING(COLUMN_NAME,
LOCATE('_', COLUMN_NAME, 1) + 1,
1)) AS `下划线第一个位置的字母`,
CASE
WHEN
LOCATE('_', COLUMN_NAME, 1) != 0
THEN
CONCAT(LOWER(SUBSTRING(COLUMN_NAME,
1,
LOCATE('_', COLUMN_NAME, 1) - 1)),
UCASE(SUBSTRING(COLUMN_NAME,
LOCATE('_', COLUMN_NAME, 1) + 1,
1)),
LOWER(SUBSTRING(COLUMN_NAME,
LOCATE('_', COLUMN_NAME, 1) + 2,
LENGTH(COLUMN_NAME))))
ELSE COLUMN_NAME
END AS `驼峰展示`,
data_type AS `数据类型`,
CASE
WHEN IS_NULLABLE = 'YES' THEN '必填'
ELSE '非必填'
END AS `是否必填`,
column_comment AS `描述`
FROM
information_schema.COLUMNS
WHERE
TABLE_NAME = 'tb_order';
如何查询列
可从MySQL的系统表information_schema.COLUMNS,直接查询目标表的信息,主要如下所示。
SELECT
COLUMN_NAME AS `数据元素`,
data_type AS `数据类型`,
CASE
WHEN IS_NULLABLE = 'YES' THEN '必填'
ELSE '非必填'
END AS `是否必填`,
column_comment AS `描述`
FROM
information_schema.COLUMNS
WHERE
TABLE_NAME = 'tb_order';
执行SQL,控制台如下所示。

如何转大写
MySQL中字符转大写,可使用 UCASE函数,字符转小写 可使用LOWER函数。
SELECT
COLUMN_NAME AS `数据元素`,
UCASE(data_type) AS `数据类型-大写`,
LOWER(data_type) AS `数据类型-小写`,
CASE
WHEN IS_NULLABLE = 'YES' THEN '必填'
ELSE '非必填'
END AS `是否必填`,
column_comment AS `描述`
FROM
information_schema.COLUMNS
WHERE
TABLE_NAME = 'tb_order';
执行SQL,控制台如下所示。

如何获取字符位置
获取字符串中指定字符位置,可使用LOCATE函数。
LOCATE(sub_str, str,length)
sub_str 表示待匹配的子串
str 表示匹配的目标字符串
length 表示匹配的长度
SELECT
COLUMN_NAME AS `数据元素`,
LOCATE('_',COLUMN_NAME,1)+1 as `下划线第一个位置`,
UCASE(SUBSTRING(COLUMN_NAME,LOCATE('_',COLUMN_NAME,1)+1,1)) AS `下划线第一个位置的字母`,
data_type AS `数据类型`,
CASE
WHEN IS_NULLABLE = 'YES' THEN '必填'
ELSE '非必填'
END AS `是否必填`,
column_comment AS `描述`
FROM
information_schema.COLUMNS
WHERE
TABLE_NAME = 'tb_order';
执行SQL,控制台如下所示。

如何拼接字段
使用CONCAT函数连接各部分子字符串。
SELECT
COLUMN_NAME AS `数据元素`,
LOCATE('_', COLUMN_NAME, 1) + 1 AS `下划线第一个位置`,
UCASE(SUBSTRING(COLUMN_NAME,
LOCATE('_', COLUMN_NAME, 1) + 1,
1)) AS `下划线第一个位置的字母`,
CASE
WHEN
LOCATE('_', COLUMN_NAME, 1) != 0
THEN
CONCAT(LOWER(SUBSTRING(COLUMN_NAME,
1,
LOCATE('_', COLUMN_NAME, 1) - 1)),
UCASE(SUBSTRING(COLUMN_NAME,
LOCATE('_', COLUMN_NAME, 1) + 1,
1)),
LOWER(SUBSTRING(COLUMN_NAME,
LOCATE('_', COLUMN_NAME, 1) + 2,
LENGTH(COLUMN_NAME))))
ELSE COLUMN_NAME
END AS `驼峰展示`,
data_type AS `数据类型`,
CASE
WHEN IS_NULLABLE = 'YES' THEN '必填'
ELSE '非必填'
END AS `是否必填`,
column_comment AS `描述`
FROM
information_schema.COLUMNS
WHERE
TABLE_NAME = 'tb_order';
执行SQL,控制台如下所示。

以上即SQL方式统计列信息的实现方案。
SQL适用场景
1、最多两个字符,通过下划线作为连接符,对于多个下划线的情况,case when 单独处理
到此这篇关于MySQL可直接使用的查询表的列信息(实现方案)的文章就介绍到这了,更多相关mysql查询表的列信息内容请搜索PHP之友以前的文章或继续浏览下面的相关文章希望大家以后多多支持PHP之友!
您可能感兴趣的文章:- MYSQL关联关系查询方式
- mysql数据库您要的常见日期查询方法总结
- MySQL查询不区分大小写的两种解决方式
- MySQL不使用子查询的原因及优化案例
- Python中使用pymysql连接MySQL数据库进行数据查询
- MYSQL中的简单查询
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。