使用Perl DBI Mysql获取查询中的最大行字符长度

时间:2012-10-01 18:38:49

标签: mysql perl dbi

使用:Perl v5.10.1,MySQL 5.5.15,DBI。

我需要通过电子邮件从数据库中提供最终用户输出。他们不希望这是一种依恋,而是在体内。

我想在ascii表中传递数据,并且在确定DBI是否内置函数来执行此操作时遇到问题(输出类似于从命令行查询MySQL)。

或者如果我可以确定最长的行字符长度,我可以用它来构建表。我有办法在数组中获取最大项长度,但我不能用查询结果来解决这个问题。

my $spacer_length = (reverse sort { $a <=> $b } map { length($_) } @array)[0];

2 个答案:

答案 0 :(得分:5)

假设有一个通用的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警告,并在出现负值时可能受到污染。

答案 1 :(得分:0)

我不确定您要求的是什么,但如果您正在查找查询结果的给定列的“最大行字符长度”,则可以使用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客户端的输出。