2009-02-10 5 views
5

J'ai un champ datetime dans une table Sybase, et j'ai besoin de l'utiliser en Perl pour faire des calculs (des différences pour m'assurer que je récupère les enregistrements distants d'au moins une minute). Maintenant, si je fais simplement un select <datetime field>, Sybase renvoie un champ lisible par l'homme qui ne me sert à rien. Je cherchais un moyen de convertir cela en dicton, une époque basée sur l'époque, ce qui me permettra de les manipuler facilement en Perl.Comment puis-je manipuler une chaîne de date-heure Sybase en Perl?

Je peux me tromper mais je n'ai pas trouvé de fonction existante pour cela dans Sybase. Le plus proche que j'ai eu est datiff, qui sert bien mon but. En fait, j'utilise cela comme une solution de rechange pour l'instant. Le problème avec datediff est dû à la limitation sur entier, il est plafonné à 68 ans. Je sais que mon code ne sera probablement pas disponible avant cette date, mais pourquoi introduire une telle limite temporelle par moi-même?

Existe-t-il un moyen de contourner ce problème?

Merci!

Répondre

4

Si vous êtes autorisé à le faire dans le client, le module Time :: ParseDate devrait être en mesure de faire le travail pour vous.

2

Les modules DateTime m'ont bien servi quand j'ai besoin de gérer les calculs de date/heure.

Utilisez la méthode DBD :: Sybase syb_date_fmt() pour contrôler le format, puis utilisez DateTime::Format::Strptime pour analyser vos résultats et générer des objets DateTime. Utilisez la méthode DateTime epoch pour obtenir votre temps, ou mieux encore faites vos calculs en utilisant les objets DateTime :: Durée appropriés.

1

Si vous ne pouvez pas faire en sorte que Sybase et Perl coopèrent pour vous donner un véritable objet DateTime ou quelque chose de similaire (comme Time :: Piece), alors la façon dont je gère habituellement ces choses est d'essayer de convaincre me format de date standard ISO (AAAA-MM-JJTHH: MI: SS) et convertir à partir de là.

Questions connexes