2009-02-10 32 views
5

Tôi có một trường datetime trong một bảng Sybase, và cần phải sử dụng nó trong Perl để thực hiện một số phép tính (sự khác biệt để đảm bảo rằng tôi chọn các bản ghi ít nhất là 'n' phút cách nhau). Bây giờ, nếu tôi chỉ đơn giản là chọn một số <datetime field>, Sybase sẽ trả về một trường có thể đọc được của con người mà tôi không thể sử dụng. Tôi đã xem xét một số cách để chuyển đổi này thành nói, một thời gian dựa trên thời gian, mà sẽ cho phép tôi thao tác chúng một cách dễ dàng trong Perl.Tôi có thể thao tác chuỗi ngày giờ Sybase trong Perl như thế nào?

Tôi có thể sai nhưng tôi không tìm thấy chức năng hiện có cho điều này trong Sybase. Gần nhất tôi đã nhận được ngàyiff, phục vụ mục đích của tôi tốt. Trong thực tế, tôi đang sử dụng như một giải pháp cho bây giờ. Vấn đề với dateiff là do giới hạn về số nguyên, nó được giới hạn ở 68 năm. Tôi biết mã của tôi có lẽ sẽ không đến khoảng thời gian đó, nhưng tại sao lại giới thiệu một giới hạn dựa trên thời gian như vậy?

Có cách nào để giải quyết vấn đề này không?

Cảm ơn!

Trả lời

4

Nếu bạn đồng ý với việc thực hiện nó trong ứng dụng khách, mô-đun Time :: ParseDate sẽ có thể thực hiện công việc cho bạn.

2

Mô-đun DateTime đã phục vụ tốt cho tôi khi tôi cần xử lý các tính toán ngày/giờ.

Sử dụng phương pháp DBD :: Sybase syb_date_fmt() để kiểm soát định dạng, sau đó sử dụng DateTime::Format::Strptime để phân tích cú pháp kết quả của bạn và tạo đối tượng DateTime. Sử dụng phương pháp DateTime epoch để có được thời gian của bạn, hoặc tốt hơn là làm toán học của bạn bằng cách sử dụng các đối tượng DateTime :: Duration thích hợp.

1

Nếu bạn không thể lấy Sybase và Perl hợp tác để cung cấp cho bạn đối tượng DateTime chính hãng hoặc một thứ tương tự (như Time :: Piece), thì cách tôi thường xử lý những thứ như vậy là cố gắng thuyết phục cơ sở dữ liệu tôi định dạng ngày chuẩn ISO (YYYY-MM-DDTHH: MI: SS) và chuyển đổi từ đó.

Các vấn đề liên quan