我在使用MySQL的数据库中有几个表(引擎是MyISAM)。我试图找到每列中最长字符串的长度(所有数据都是文本)。现在我正在尝试运行看起来像的代码:
SELECT LENGTH(col) FROM schema.table ORDER BY LENGTH(col) DESC LIMIT 1;
我手动输入了列名和表名。但是,继续这将需要永远。
至少,有没有办法让我分配一个变量并用该变量替换col
的两个实例,这样我就不必反复输入它了?
如果我可以,对于给定的表,迭代所有列并返回每列中最长字符串的长度,那将更好。
谢谢!
编辑:Hybridzz,这两个链接都没有解决我的问题;我似乎无法让MySQL接受变量赋值。
我之前也尝试了这四个搜索: MySQL: Assign column value to variable
Setting columns variably in Mysql
https://stackoverflow.com/questions/2642677/how-to-use-database-name-as-a-value
答案 0 :(得分:0)
您想要的基本SQL是:
select max(length(col1)), max(length(col2)), . . .
from table t;
您可以通过查询varchar
获取表格中information_schema.columns
的所有列的表达式:
select group_concat('max(length(', column_name, '))' separator ', ')
from information_schema.column
where data_type = 'varchar' and table_name = 'table' and table_schema = 'schema';
然后,您可以将表达式复制到select
。或者将它们放入一个字符串中并使用prepare
。