我正在映射 MySQL 表中的数据,并且有一个包含超过 50 列和超过 100,000 行的表,我需要映射其中包含 4 个字符或更少的数据的列。
如何获取表中包含仅包含四个字符或更少字符的数据的所有列的列表?就我而言,所有列都是 varchar(255)。
我正在映射 MySQL 表中的数据,并且有一个包含超过 50 列和超过 100,000 行的表,我需要映射其中包含 4 个字符或更少的数据的列。
如何获取表中包含仅包含四个字符或更少字符的数据的所有列的列表?就我而言,所有列都是 varchar(255)。
SELECT
COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = <table>
AND CHAR_LENGTH(COLUMN_NAME) <= 4
这将为您提供名称包含 4 个或更少字符的列:
SHOW COLUMNS FROM table WHERE CHAR_LENGTH(Field) < 5
在上面的 sql 中,你只需table
要用你的表名替换,这Field
是一个文字,你必须保持这种方式。
更新:
如果您想要包含 4 个或更少字符的列内容,那么您可以这样:
select * from table where CHAR_LENGTH(column_name) < 5
我认为您需要使用来自的信息创建一个动态查询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 个或更少字符的所有列。
它可以通过存储过程来完成。