首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql -选择数据长度小于N长度的列

问MySql -选择数据长度小于N长度的列
EN

Stack Overflow用户
提问于 2019-08-23 19:50:55
回答 1查看 517关注 0票数 2

我在mysql中有一个表,其中包含近150列。我想找出那些数据不超过3个字符的列名。我找不到数据类型长度小于3个字符的列。

示例

代码语言:javascript
复制
+-----------------+-----------------+-----------------+
| Col1 (varchar10)| Col2 (varchar10)| col3 (varchar11)|
+-----------------+-----------------+-----------------+
|              11 |            1212 |            1212 |
|               1 |             122 |              12 |
|              15 |             123 |          134444 |
+-----------------+-----------------+-----------------+

结果应该是这样的

代码语言:javascript
复制
+--------------+
| Column Names |
+--------------+
| Col1         |
+--------------+
| Col3         |
+--------------+.

因此,我遇到了这个用于打印列名的SQL,但长度是实际的列数据类型长度。我想要数据长度。

代码语言:javascript
复制
SELECT column_name, 
       character_maximum_length 
FROM   information_schema.columns 
WHERE  table_schema = 'tvs' and table_name = 'xyz'

注意:这个示例显示了varchar(10)数据类型,但实际上我有数字以及var char列。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-23 20:30:18

您可以使用动态SQL来构建查询。这里有一些步骤。

首先,您可能需要获取表的字段名:

代码语言:javascript
复制
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,例如

代码语言:javascript
复制
SELECT CASE WHEN MAX(CHAR_LENGTH(col1)) <= 3 THEN 'col1' END AS colName FROM yourdatabasename.yourtablename

如果为MAX(CHAR_LENGTH(col1)) <= 3,则显示'col1'

现在,您可以使用第一个查询构建另一个MySQL查询:

代码语言:javascript
复制
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';

这将为您提供如下输出:

代码语言:javascript
复制
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

现在,您可以复制/粘贴此结果并将其用作查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57625797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档