我在 mysql 中有一个表包含将近 150 列。我想找出那些不超过 3 个字符数据的列名。我找不到数据类型长度小于 3 个字符的列。
例子
+-----------------+-----------------+-----------------+
| Col1 (varchar10)| Col2 (varchar10)| col3 (varchar11)|
+-----------------+-----------------+-----------------+
| 11 | 1212 | 1212 |
| 1 | 122 | 12 |
| 15 | 123 | 134444 |
+-----------------+-----------------+-----------------+
结果应该是这样的
+--------------+
| Column Names |
+--------------+
| Col1 |
+--------------+
| Col3 |
+--------------+.
所以我遇到过这个 SQL 来打印列名,但长度是实际的列数据类型长度。我想要数据长度。
SELECT column_name,
character_maximum_length
FROM information_schema.columns
WHERE table_schema = 'tvs' and table_name = 'xyz'
注意:此示例显示的是 varchar(10) 数据类型,但实际上我还有 numeric 以及 var char 列。
最佳答案
您可以使用动态 SQL 来构建查询。有一些步骤。
首先,您可能需要获取表的字段名称:
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = 'yourdatabasename'
AND `TABLE_NAME` = 'yourtablename'
AND `DATA_TYPE` = 'varchar'; -- This will get you only the varchar types fields
如前所述@Madhur Bhaiya在评论中,您可以使用 MAX(CHAR_LENGTH(column_name))
获取字段中 varchar 的最大长度。
对于单个字段,这个可以用used such as
SELECT CASE WHEN MAX(CHAR_LENGTH(col1)) <= 3 THEN 'col1' END AS colName FROM yourdatabasename.yourtablename
这将显示 'col1'
如果MAX(CHAR_LENGTH(col1)) <= 3
现在您可以使用第一个查询来构建另一个 MySQL 查询:
SELECT 'SELECT * FROM ('
UNION
SELECT CONCAT('SELECT CASE WHEN MAX(CHAR_LENGTH(', `COLUMN_NAME`, ')) <= 3 THEN \'', `COLUMN_NAME`, '\' END AS colName FROM yourdatabasename.yourtablename\nUNION')
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = 'yourdatabasename'
AND `TABLE_NAME` = 'yourtablename'
AND `DATA_TYPE` = 'varchar'
UNION
SELECT 'SELECT NULL) cols WHERE colName IS NOT NULL';
这将为您提供如下输出:
SELECT * FROM (
SELECT CASE WHEN MAX(CHAR_LENGTH(col1)) <= 3 THEN 'col1' END AS colName FROM yourdatabasename.yourtablename
UNION
SELECT CASE WHEN MAX(CHAR_LENGTH(col2)) <= 3 THEN 'col2' END AS colName FROM yourdatabasename.yourtablename
UNION
SELECT CASE WHEN MAX(CHAR_LENGTH(col3)) <= 3 THEN 'col3' END AS colName FROM yourdatabasename.yourtablename
UNION
SELECT NULL) cols WHERE colName IS NOT NULL
您现在可以复制/粘贴此结果并将其用作查询。
关于MySql - 选择数据长度小于 N 的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57625797/