[英]Getting the max row character length in a query using Perl DBI Mysql
使用:Perl v5.10.1,MySQL 5.5.15,DBI。
我需要通过电子邮件从数据库传递最终用户输出。 他们不希望这样作为附件,而是希望在体内。
我想将数据传递到ascii表中,并且在确定DBI是否具有内置函数来执行此操作时遇到问题(输出类似于从命令行查询MySQL)。
或者,如果我可以确定最长的行字符长度,则可以使用它来构建表。 我有一种获取数组中最大项目长度的方法,但是我无法用查询结果来解决问题。
my $spacer_length = (reverse sort { $a <=> $b } map { length($_) } @array)[0];
假设有一个通用的DBI循环,您可以执行以下操作:
use List::Util qw(max);
...
my @output;
my $max;
while (my @foo = $dbi->fetchrow_array) {
$max = max($max // (), map length, @foo);
push @output, \@foo; # save data for email attachment
}
//
使用“定义或”运算符//
避免出现undef
警告,并在出现负值时可能造成污染。
我不确定您到底要问什么,但是如果您要为查询结果的给定列寻找“最大行字符长度”,则可以使用SQL来做到这一点:
SELECT MAX(CHAR_LENGTH(col1)) FROM t1
或者,如果您希望所有行按col1值的长度排序:
SELECT col1,col2 from t1 ORDER BY CHAR_LENGTH(col1) DESC
您可以像这样使用DBI执行这些查询:
# $mysql is your DBI connection info
my $query = $mysql->prepare("SELECT col1,col2 from t1 ORDER BY CHAR_LENGTH(col1) DESC");
$query->execute();
然后遍历结果行:
while ( my @result = $query->fetchrow_array ) {
my ($col1,$col2) = @result;
# do stuff with the values
}
并且您可以根据需要打印这些值,包括从命令行mysql客户端输出的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.