5

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

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

4

4 回答 4

1
SELECT
  COLUMN_NAME

FROM INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_NAME = <table>
AND CHAR_LENGTH(COLUMN_NAME) <= 4
于 2012-09-24T12:02:56.987 回答
0

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

SHOW COLUMNS FROM table WHERE CHAR_LENGTH(Field) < 5

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

更新:
如果您想要包含 4 个或更少字符的列内容,那么您可以这样:

select * from table where CHAR_LENGTH(column_name) < 5
于 2012-09-24T12:01:21.877 回答
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 个或更少字符的所有列。

于 2012-09-24T12:21:02.760 回答
0

它可以通过存储过程来完成。

  1. 从表中选择所有重要的列名并存储到临时表中;
  2. 使用 WHILE 或 REPEAT 循环遍历它们并执行 SELECT LENGTH(column_name) FROM table。
于 2012-09-24T12:41:22.640 回答