2009-02-10 11 views
5

Ho un campo data/ora in una tabella Sybase e devo usarlo in Perl per fare alcuni calcoli (differenze per essere sicuro di raccogliere i record che sono almeno 'n' min separati). Ora, se faccio semplicemente un select <datetime field>, Sybase restituisce un campo leggibile dall'uomo che non mi serve. Stavo guardando un modo per convertire questo in un tempo basato sull'epoca, che mi consentirà di manipolarli facilmente in Perl.Come posso manipolare una stringa datetime Sybase in Perl?

Potrei sbagliarmi ma non ho trovato una funzione esistente per questo in Sybase. Il più vicino che ho ricevuto è stato datato, il che mi è utile per il mio scopo. In realtà, lo sto usando come soluzione alternativa per ora. Il problema con datediff è a causa della limitazione sul numero intero, è limitato a 68 anni. So che probabilmente il mio codice non sarà disponibile fino a quel momento, ma perché introdurre un limite basato sul tempo per conto mio?

C'è un modo per aggirare questo?

Grazie!

risposta

4

Se si sta bene nel farlo nel client, il modulo Time :: ParseDate dovrebbe essere in grado di fare il lavoro per voi.

2

I moduli DateTime mi hanno servito bene quando ho bisogno di gestire i calcoli di data/ora.

Utilizzare il metodo DBD :: Sybase syb_date_fmt() per controllare il formato, quindi utilizzare DateTime::Format::Strptime per analizzare i risultati e generare oggetti DateTime. Usa il metodo DateTime epoch per ottenere il tuo epoch time, o meglio ancora fai i tuoi calcoli usando gli oggetti DateTime :: Duration appropriati.

1

Se Sybase e Perl non riescono a cooperare per fornire un oggetto DateTime originale o qualcosa di simile (come Time :: Piece), il modo in cui generalmente gestisco tali cose è cercare di convincere il database a fornire me formato di formato standard ISO (YYYY-MM-DDTHH: MI: SS) e convertire da lì.

Problemi correlati