我在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)数据类型,但实际上我有数字以及var char列。
发布于 2019-08-23 20:30:18
您可以使用动态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,例如
SELECT CASE WHEN MAX(CHAR_LENGTH(col1)) <= 3 THEN 'col1' END AS colName FROM yourdatabasename.yourtablename如果为MAX(CHAR_LENGTH(col1)) <= 3,则显示'col1'
现在,您可以使用第一个查询构建另一个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现在,您可以复制/粘贴此结果并将其用作查询。
https://stackoverflow.com/questions/57625797
复制相似问题