我正在从MySQL表中映射数据,并且有一个包含超过50列和超过100,000行的表,我需要映射包含4个字符或更少字符的数据的列。
如何获取表中包含仅包含四个字符或更少字符的所有列的列表?就我而言,所有列都是varchar(255)。
答案 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中,你只需要用你的表名替换table
,Field
是一个文字,你必须保持这种方式。
<强>更新强>
如果您希望列内容包含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)
可以通过存储过程完成。