MySQL查询所有列的最小和最大字符长度

标签 mysql

基本上,我有一个表,其中填充了大约 300 万行,并且我需要知道每列的字符长度。考虑到该表中有 138 列,如何在一个查询中获取这些值? 结果会是这样的:

+----------+-----------------+---------------|
| col_name | min_char_length |max_char_length|
+----------+-----------------+---------------|
|   col1   |      10         |      20       |
+----------+-----------------+---------------|
|   col2   |       1         |      15       |
+----------+-----------------+---------------|

提前谢谢您。

最佳答案

我不知道任何直接的方法,但您可以生成这样的问题查询。

解决方案

SELECT CONCAT(GROUP_CONCAT( 
CONCAT('(SELECT \'',COLUMN_NAME,'\' AS `column`, MAX(LENGTH(`',COLUMN_NAME,'`)) AS `max_length`, MIN(LENGTH(`',COLUMN_NAME,'`)) AS `min_length` ',
'FROM `',TABLE_SCHEMA,'`.`',TABLE_NAME, '`)')
SEPARATOR ' UNION ALL '), ';') AS sql_query
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'db_name' AND TABLE_NAME = 'table_name';

增加 GROUP_CONCAT() 的限制

GROUP_CONCAT()返回的最长字符串默认为1024。因此,您需要增加此限制。

示例:

SET group_concat_max_len = 1024;

希望我能帮到你。

关于MySQL查询所有列的最小和最大字符长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46446565/

相关文章:

mysql - 将 kubernetes 上托管的 jenkins 连接到 Google Cloud Platform 上的 MySQL

mysql - 需要mysql查询从两个表中提取数据

java - 在应用程序启动时缓存数据库表数据

php - 检测以 z 开头但不以 zz 开头的字符串的简单正则表达式

mysql - 在没有主键的情况下编辑 MySQL 数据库中的数据

当我尝试获取数据时 Php block 不工作

mysql - 更改也是另一个表的外键的主键列 - Mysql

mysql - 像这样在 sum() 中使用 sql 变量 --sum(@wokao) 导致不可预测的结果

php - Laravel:设置自定义主键值的方法

php - 传递数组并从 MySQL 表中删除