2009-02-10 4 views
5

Ich habe ein Datetime-Feld in einer Sybase-Tabelle und muss es in Perl für einige Berechnungen verwenden (Unterschiede, um sicherzustellen, dass ich die Datensätze abnehme, die mindestens 'n' Minuten auseinander liegen). Nun, wenn ich einfach eine Auswahl <datetime field> mache, gibt Sybase ein von Menschen lesbares Feld zurück, das mir nicht weiterhilft. Ich habe mir einen Weg gesucht, dies in eine epochale Zeit umzuwandeln, die es mir erlaubt, sie leicht in Perl zu manipulieren.Wie kann ich eine Sybase-Datetime-Zeichenfolge in Perl bearbeiten?

Ich könnte falsch liegen, aber ich habe keine bestehende Funktion in Sybase gefunden. Das nächste, was ich bekam, war ein Datiff, der meinem Zweck gerecht wird. In der Tat verwende ich das als Workaround für jetzt. Das Problem mit datediff ist wegen der Beschränkung auf Integer, es ist auf 68 Jahre begrenzt. Ich weiß, dass mein Code wahrscheinlich bis dahin nicht da sein wird, aber warum sollte ich ein solches Zeitlimit einführen?

Gibt es eine Möglichkeit, dies zu umgehen?

Danke!

Antwort

4

Wenn Sie mit dem Client arbeiten, sollte das Time :: ParseDate-Modul die Arbeit für Sie erledigen können.

2

Die DateTime Module haben mir gut gedient, wenn ich mit Datum/Zeit Berechnungen umgehen muss.

Verwenden Sie die Methode DBD :: Sybase syb_date_fmt(), um das Format zu steuern, und verwenden Sie dann DateTime::Format::Strptime, um Ihre Ergebnisse zu analysieren und DateTime-Objekte zu generieren. Verwenden Sie die DateTime-Methode epoch, um Ihre Epoche zu ermitteln, oder besser: rechnen Sie mit den entsprechenden DateTime :: Duration-Objekten.

1

Wenn Sie nicht können Sybase und Perl zusammenarbeiten, um Ihnen ein echtes DateTime-Objekt oder etwas ähnliches (wie Time :: Piece) zu geben, dann ist die Art, wie ich normalerweise mit solchen Dingen umzugehen versuchen, die Datenbank zu überzeugen mir ISO-Standard-Datumsformat (JJJJ-MM-DDTHH: MI: SS) und von dort konvertieren.