如何返回表中仅包含四个字符或更少字符的数据的所有列?

时间:2012-09-24 11:53:46

标签: mysql

我正在从MySQL表中映射数据,并且有一个包含超过50列和超过100,000行的表,我需要映射包含4个字符或更少字符的数据的列

如何获取表中包含仅包含四个字符或更少字符的所有列的列表?就我而言,所有列都是varchar(255)。

4 个答案:

答案 0 :(得分:1)

SELECT
  COLUMN_NAME

FROM INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_NAME = <table>
AND CHAR_LENGTH(COLUMN_NAME) <= 4

答案 1 :(得分:0)

这将为您提供名称包含4个或更少字符的列:

SHOW COLUMNS FROM table WHERE CHAR_LENGTH(Field) < 5

在上面的sql中,你只需要用你的表名替换tableField是一个文字,你必须保持这种方式。

<强>更新
如果您希望列内容包含4个或更少的字符,那么您可以这样:

select * from table where CHAR_LENGTH(column_name) < 5

答案 2 :(得分:0)

我认为您需要使用INFORMATION_SCHEMA.COLUMNS中的信息创建动态查询,然后执行该操作。未经测试,但类似于:

SET @s = 'SELECT GROUP_CONCAT(X) AS FOUR_CHAR_COLS, ID FROM (' + 
        (SELECT GROUP_CONCAT('SELECT CASE WHEN CHAR_LENGTH(`' + COLUMN_NAME + 
        '`) <= 4 THEN ''' + COLUMN_NAME + ''' ELSE NULL END AS X, ID FROM MyTableName' 
          SEPARATOR ' UNION ALL ')
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = 'MyTableName') + 
    ') XX GROUP BY ID';

PREPARE stmt FROM @s;
EXECUTE stmt;

这应该列出每行中包含4个字符或更少字符的所有列。

答案 3 :(得分:0)

可以通过存储过程完成。

  1. 从表中选择所有列名称并将其存储到临时表中;
  2. 使用WHILE或REPEAT循环遍历它们并执行SELECT LENGTH(column_name)FROM table。