Обсуждение: Selecting time periods
Hiya List,
OK I'm stumped. More than likely this is easy but I cant work it out.
Debian 4
Postgresql 8.3.1
I'm trying to insert some records into various tables (that bit works
ok) but now I want to have another table that records the shift that the
record was inserted on.
table shift_times ( shift_id pk, shift text, start time, finish time,
days varchar[])
data
1 A 7:00 19:00 {0,1,2}
2 B 19:00 7:00 {0,1,2,3}
3 C 7:00 19:00 {3,4,5}
4 D 19:00 7:00 {3,4,5,6}
Now what I want to do is basically just select the shift and insert
some data into another table linking shift and record_id etc.
My problem is trying to workout the select statement for getting the
shift.
I've tried SELECT shift from shift_times where '17:00' between start
AND finish;
Which works for A and C but if I change the 17:00 to 19:30 it returns
no rows.
I havent even tried thinking on the days yet.
As this is only in a test dbase I can change the table/s etc if need be
I realize I could do it with if/else statements on the trigger/s but I
want to make it as easy as possible for someone else to change the shift
start/finish times/days.
Anyway if anyone has ideas or can point me to a web page/etc it would be
appreciated.
Peter Jackson
> From: pgsql-novice-owner@postgresql.org [mailto:pgsql-novice- > owner@postgresql.org] On Behalf Of Peter Jackson > Subject: [NOVICE] Selecting time periods > I've tried SELECT shift from shift_times where '17:00' between start > AND finish; > Which works for A and C but if I change the 17:00 to 19:30 it returns > no rows. Just taking a guess here, but how about: SELECT shift FROM shift_times WHERE '19:30' BETWEEN least(start,finish) AND greatest(start,finish); Matthew Hartman Programmer/Analyst Information Management, ICP Kingston General Hospital .now.
On 2009-07-11, Peter Jackson <tasmaniac@iprimus.com.au> wrote:
> Hiya List,
>
> OK I'm stumped. More than likely this is easy but I cant work it out.
>
> Debian 4
> Postgresql 8.3.1
>
> I'm trying to insert some records into various tables (that bit works
> ok) but now I want to have another table that records the shift that the
> record was inserted on.
>
> table shift_times ( shift_id pk, shift text, start time, finish time,
> days varchar[])
>
> data
> 1 A 7:00 19:00 {0,1,2}
> 2 B 19:00 7:00 {0,1,2,3}
> 3 C 7:00 19:00 {3,4,5}
> 4 D 19:00 7:00 {3,4,5,6}
time is an interestign quantity.
I note that shifts B and D run concurrently on day 3
> Now what I want to do is basically just select the shift and insert
> some data into another table linking shift and record_id etc.
>
> My problem is trying to workout the select statement for getting the
> shift.
try this:
-- eg '17:00' on day '3'
select shift from shift times where
( '17:00'::time between start and finish or
finish < start and not '17:00'::time between finish and start );