当我直接在SQL服务器上查询数据源时,有一个日期和时间戳列以如下所示的格式返回。
2011-05-26 16:19:20
2013-01-10 15:20:35
2008-01-10 14:51:01
2013-01-10 17:40:31
2008-03-26 18:23:20
2010-03-04 16:18:14
但是,当我在perl脚本中查询相同的数据源并将结果写入.txt文件时,日期格式如下所示。
Jun 14 2011 10:49AM
Jun 17 2010 04:23PM
Aug 13 2010 08:28AM
Jun 18 2007 08:41AM
Jul 26 2012 07:18PM
Jun 11 2010 11:37AM
Aug 20 2010 09:28AM
SQL查询:
SELECT TOP 100 PERCENT UserNM AS [User ID], MAX(EventDT) AS [Last Login Date]
FROM dbo.WFEventLog
GROUP BY UserNM
ORDER BY UserNM
写入文件的脚本部分:
open(FILE, ">cleanup.txt") || die "$!n";
while( my $hash_ref = $sth->fetchrow_hashref ){
my $userid = "$hash_ref->{'UserID'}";
my $logindt = "$hash_ref->{'Last Login Date'}";
# dump all registered users into .csv file
print FILE "$userid t $logindtn";
}
close(FILE);
我正在寻找的是从SQL结果写入文件的确切格式。由于某些原因,在此之前发生了格式化,我不希望发生。
如果您正在使用DBD::Sysbase,则引用文档:
控制DATETIME输出格式^
默认DBD::Sybase将以Nov 15 1998 11:13AM的格式返回DATETIME和SMALLDATETIME列。这可以通过私有syb_date_fmt()方法进行更改。
语法是$dbh->syb_date_fmt($fmt);
我假设您希望它们采用相同的格式。我会先看看数据库是否会为您格式化,但由于我不知道您处理的是什么数据库,perl有几个模块可以很好地用于此目的。他们所有人的祖父是Date::Manip。要按照数据库输出的格式格式化日期,您可以:
UnixDate(ParseDate($in), '%Y-%m-%d %H:%M:%S';