Thread SQL-Datum mit Perl-Datum subtrahieren (DB2)
(3 answers)
Opened by Hoppii at 2015-04-09 17:08
Leider ist TIMESTAMPDIFF von DB2 nicht akkurat genug.
Deswegen muss du eine Funktion epoch (wandelt deinen DB2-timestamp in unixtimestamp) in DB2-SQL selbst erstellen: Code: (dl
)
1 create or replace function epoch (in db2ts timestamp) 1. SQL ausdenken um mit epoch den ersten Timestamp zu holen (dein SELECT halt) 2. in Perl mit DBI und DBD::DB2 das SQL ausführen und den Wert auslesen 2. in Perl mit +time() (=aktueller Timestamp) vergleichen 3. Wenn die absolute Differenz größer 3 * 86400, dann ist es älter als drei Tage //EDIT: Ah, es gibt Time::Piece und Time::Piece::DB2 da kannst du die Differenz einfach berechnen. Hoffe ich. Ungetestet: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 use DBI; use DBD::DB2::Constants; use DBD::DB2; use Time::Piece; use Time::Piece::DB2; my $now = localtime; # das ist das localtime von Time::Piece!!! # Zugangsdaten Datenbank my ( $username, $password ) = ( 'usermurks22', 'OxMoxPurrl123'); # Datenbank verbinden my $dbh = DBI->connect("dbi:DB2:db_name", $username, $password); # !!! musst du für dich anpassen!!!! # SQL für Abfrage des Datums erzeugen my $SQL = 'SELECT date1 FROM table221'; # !!! musst du für dich anpassen!!! # SQL vorbereiten my $sth = $dbh->prepare( $SQL ); # SQL auaführen $dbh->execute(); # eine Datenbankzeile auslesen my @row = $sth->fetchrow; # gewünschtes Datum aus Puffer holen my $db2_date = $row[0]; # DB2 timestamp in Time::Piece-Objekt umwandeln my $time = Time::Piece->from_db2_timestamp( $db2_date ); # Datum vergleichen if ( abs($now-$time) > 3 * ONE_DAY) { # älter als 3 Tage ... ... } Editiert von GwenDragon: beispiel für Time-Piece Last edited: 2015-04-09 18:57:06 +0200 (CEST) |