all groups > sql server mseq > november 2005 >
You're in the

sql server mseq

group:

Finding the Shift for current hour


Finding the Shift for current hour Pradeep TN
11/5/2005 7:43:02 AM
sql server mseq:
I have a table which stores the shift timing like this:

ShiftId StartTime EndTime WeekDay Shift
1 6:00:00 AM 6:00:00 PM 7 Shift A
2 6:00:00 PM 6:00:00 AM 7 Shift B
4 6:00:00 AM 6:00:00 PM 112 Shift C
8 6:00:00 AM 6:00:00 PM 112 Shift D
16 8:00:00 AM 5:00:00 PM 62 Day
32 8:00:00 AM 5:00:00 PM 31 Shift E
64 12:00:00 AM 12:00:00 PM 112 Midnight

Each user has a shift assigned. In my application, whenever there is a
certain event, I need to notify (email) the users about the event. For this I
need to find out to which shift the current time belongs (so that I notify
only users belongin to the proper shift). For ex, if an event has occured at
5:30 AM I need to find out all the shifts.

I am finding it difficult to write the SQL for this since the timing are
overlapping. Please help me with the SQL.

Re: Finding the Shift for current hour Hugo Kornelis
11/5/2005 9:21:52 PM
On Sat, 5 Nov 2005 07:43:02 -0800, "Pradeep TN" <Pradeep
[quoted text, click to view]

Hi Pradeep TN,

Try if this works:

DECLARE @EventMoment datetime
SET @EventMoment = '00:05:30' -- Use 24h clock and hh:mm:ss notation

SELECT ShiftId, Shift
FROM Shifts
WHERE @EventMoment <= EndTime
-- Case 1: "normal" shifts
AND (( @EventMoment >= StartTime
AND EndTime >= StartTime)
-- Case 2: shifts with EndTime before StartTime (these include midnight)
OR ( @EventMoment <= StartTime
AND EndTime <= StartTime))

(Untested - see www.aspfaq.com/5006 if you prefer a tested solution)

Best, Hugo
--

Re: Finding the Shift for current hour Pradeep TN
11/7/2005 5:21:02 AM
Hi Hugo Kornelis,

Thank you very much for your reply. The query is working fine. However, I
had to make one change in my data since the query failed on one condition.
Since I was only interested in "time" part, I had not looked properly into
the "date" part. When I insert rows for the given shift information, the
"date" part defaults to '1899-12-30'. I am not sure why this is so, since the
base date is supposed to be '1900-01-01'.

If you look at Shift B, it starts from 6 PM - 6AM. Now if '1899-12-30' is
supposed to be by "base date" for this table, 6 AM represents 6 AM of
'1899-12-31'. So made that change in the table and your query is working
fine. Before this change, if my @EventMoment was '18:10:00', there were no
rows returned.

Once again thanks for you help.

--Pradeep

[quoted text, click to view]
Re: Finding the Shift for current hour Hugo Kornelis
11/7/2005 11:44:07 PM
[quoted text, click to view]

Hi Pradeep,

Are you using Enterprise Manager to isnert the data? For some mysterious
reason, the deveopers who wrote EM seem not to have tallked to the
developers who wrote the core data handling of SQL Server - instead of
asking them for the default date, they chose their own. 1899-12-30, as
you might have guessed.


[quoted text, click to view]

Yeah, my query assumed that the times were stored with the correct
default date. Glad you were able to sort this last problem out by
yourself!

Best, Hugo
--

AddThis Social Bookmark Button