MySql-选择数据长度小于N长度的列
我在mysql中有一个表,它包含将近150列。我想找出那些数据不超过3个字符的列名。我找不到数据类型长度小于3个字符的列 范例MySql-选择数据长度小于N长度的列,mysql,Mysql,我在mysql中有一个表,它包含将近150列。我想找出那些数据不超过3个字符的列名。我找不到数据类型长度小于3个字符的列 范例 +-----------------+-----------------+-----------------+ | Col1 (varchar10)| Col2 (varchar10)| col3 (varchar11)| +-----------------+-----------------+-----------------+ | 11
+-----------------+-----------------+-----------------+
| 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'
注意:本例显示了varchar10数据类型,但实际上我有数值列和VARCHAR列。您可以使用动态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
如注释中所述,您可以使用MAXCHAR_LENGTHcolumn_name获取字段中varchar的最大长度
对于单个字段,可以使用
SELECT CASE WHEN MAX(CHAR_LENGTH(col1)) <= 3 THEN 'col1' END AS colName FROM yourdatabasename.yourtablename
这将为您提供如下输出:
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
现在可以复制/粘贴此结果并将其作为查询。
使用Max CalthLangthCulnNyNoLy获得每列的最大字符长度,然后只考虑字符长度超过150列的位置。我正在寻找一种动态解决方案,不必显式地给出列名。否则,我需要找到所有的列名。我想打印列名。不是行。您可能希望构建一个存储过程,在所有列名的信息\u架构上进行迭代,从信息\u schema.COLUMNS中选择column\u NAME,其中table\u NAME='tbl\u NAME'。希望有人能提供一个很好的示例,但这应该可以让您开始了解如何获取列名。@Mubasher据我所知,您需要创建一个存储过程来完成此操作。看看这个问题的公认答案,让我试试。我认为这是最接近的一个。谢谢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