2016-04-18 8 views
0

私は、あるデータベースのテーブルのデータを他のDBの同じテーブルにコピーするperlスクリプトを作成しています。私はDBIとの接続を得るためにDBIを使用しています。 データをコピーしているときに、正しくコピーされていないことに気付きました。
日付がこのような場合のソーステーブル - '04/22/1996 13:51:15 PM '
宛先テーブルでは、' 22 APR 1996 'のように表示されます。 誰でも正確な日付のコピーを手伝ってもらえますか?事前タイムスタンプで日付を取得して挿入する

+0

タグで

おかげで、使用しているDBMS。 (多くのdbms製品は、日付/時刻に関してANSI SQLに準拠していません) – jarlh

+3

04/22/1996は、基本的には異なる形式の22 APR 1996と同じ日付です。データベースシステムによって提供される適切な日付フォーマット関数を使用してください。 – syck

+0

両方とも日付フィールドの列である場合、日付を提示する際の書式設定の問題のように聞こえます.2つのシステムでは、デフォルトでは同じ形式ではありません。 –

答えて

0
#!/usr/bin/env perl 
use DateTime::Format::Strptime; 
my $datetimestr = '04/22/1996 13:51:15 PM'; 
# 1) parse datetime 
my $parser = DateTime::Format::Strptime->new(
    pattern=>'%m/%d/%Y %H:%M:%S %p', 
    on_error => 'croak', 
); 
my $dt = $parser->parse_datetime($datetimestr,); 
# 2) format datetime for your database format 
warn $dt->strftime('%Y-%m-%d %H:%M:%S'); 
+0

日付の時間に関する1つのコメント、あなたがそれを束と呼ぶなら、それは比較的遅いです。スピードが問題であれば、特にタイムゾーンや曜日の情報が必要ない場合は、独自のパーサを書くことは価値がある可能性があります。 – kchinger

+0

DateTimeは本当に遅いですが、データベースで作業している場合はそれほど高価ではありません。あなたは特定のフォーマットのための高速パーサを書くことができますが、このコードを維持するのは難しいでしょう。 –

関連する問題