我正在尝试根据从MySQL数据库中提取的变量来计算时间。
用户输入一个数字来表示持续时间(以小时为单位)。我需要我的Perl脚本来检查事件结束的纪元时间。
0.5 = 30 min
0.75 = 45 min
3 = 3 hours
我发现在MySQL语句中使用以下代码可以正常工作,但是需要对其进行解析。我需要直接在Perl中完成这项工作,但无法找到执行此操作的模块/插件。
SELECT SEC_TO_TIME(duration * 60 * 60) AS duration FROM database;
+----------+
| duration |
+----------+
| 01:00:00 |
| 04:00:00 |
| 02:00:00 |
| 00:45:00 |
+----------+
答案 0 :(得分:1)
以下适用于SQLite。但它没有任何DATETIME类型。不幸的是,您还没有指定表格的样子以及列的内容。类型是,所以我不得不捣蛋。
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
use DBI;
use Time::Piece;
my $db = 'DBI'->connect('dbi:SQLite:dbname=:memory:', "", "");
$db->do('CREATE TABLE durations (start INT, duration REAL)');
my $insert = $db->prepare('INSERT INTO durations (start, duration) VALUES (?, ?)');
my $now = time;
say join "\t", $now, localtime->cdate;
$insert->execute($now, $_) for 0.5, 0.75, 3;
my $select = $db->prepare('SELECT start, duration FROM durations');
$select->execute;
while (my ($start, $hours) = $select->fetchrow_array) {
my $epoch = $start + $hours * 60 * 60;
say join "\t", $epoch, localtime($epoch)->cdate;
}