Re: RFC:: DateTime::Span::Common

[email protected] (Rick Measham)
Newsgroups perl.datetime
Message-ID <[email protected]>
Zefram wrote:
> Terrence Brannon wrote:
>> Yes, I would determine that aribtrary 1 second or nanosecond based on
>> the data in my database tables. a MySQL BETWEEN clause includes its
>> endpoints.
> 
> BETWEEN, then, is not the right way to express an open or half-open
> interval.  If you're going to add anything to DT::Span, add a method that
> generates the correct SQL expression, taking account of the openness of
> each end of the interval.
> 
> -zefram


Sounds like a job for DateTime::Format::MySQL ..

$span = DateTime::Span->from_datetimes( start => $dt1, end => $dt2 );
print DateTime::Format::MySQL->format_span( $span, 'colname' );
# colname >= '2009-04-08 23:22:00' AND colname <= '2009-04-09 23:22:00'

$span = DateTime::Span->from_datetimes( start => $dt1, before => $dt2 );
# colname >= '2009-04-08 23:22:00' AND colname < '2009-04-09 23:22:00'

$span = DateTime::Span->from_datetimes( after => $dt1, before => $dt2 );
# colname > '2009-04-08 23:22:00' AND colname < '2009-04-09 23:22:00'

$span = DateTime::Span->from_datetimes( start => $dt1 );
# colname >= '2009-04-08 23:22:00'


And could be extended to SpanSets too:
$spanset = DateTime::SpanSet->from_spans( spans => [ $dt_span, $dt_span ] );
# (colname >= '2009-04-08 23:22:00' AND colname < '2009-04-09 23:22:00') 
OR (colname >= '2009-05-08 23:22:00' AND colname < '2009-05-09 23:22:00')

(Of course, this couldn't be expected to work on infinite or even large 
spansets)

Just my $0.02.

Cheers!
Rick Measham
-- 
Message  protected for iSite by MailGuard: e-mail anti-virus, anti-spam and content filtering.
http://www.mailguard.com.au
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.