1

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 $logindt\n";

    }

close(FILE);

私が探しているのは、ファイルに書き込まれる SQL 結果の正確な形式です。なんらかの理由で、それが起こる前に、私が望んでいない改革が行われています。

4

2 に答える 2

1

DBD::Sysbase を使用している場合は、ドキュメントを引用します。

DATETIME 出力形式の制御 ^

デフォルトでは、DBD::Sybase は DATETIME および SMALLDATETIME 列を 1998 年 11 月 15 日 11:13AM 形式で返します。これは、プライベートな syb_date_fmt() メソッドを介して変更できます。

構文は次のとおりです。

$dbh->syb_date_fmt($fmt);
于 2013-01-11T22:34:56.810 に答える
0

私はあなたがそれらを同じフォーマットにしたいと思っています。データベースがフォーマットするかどうかを最初に確認しますが、どのデータベースを扱っているか分からないので、perl にはこの目的に適したモジュールがいくつかあります。それらすべての祖父はDate::Manipです。データベースによって出力される形式で日付をフォーマットするには、次のようにします。

UnixDate(ParseDate($in), '%Y-%m-%d %H:%M:%S';
于 2013-01-11T21:27:19.870 に答える