sql query date time

Hi!

i have 2 datetime fields  OnDateTime, OfDateTime

OnDateTime  2012-04-02 18:00:00
OffDateTime 2012-12-01  23:00:00


the query needs to return data between the dates but only between 18:00:00 -23:00:00 every day between the 2 dates. i'e it should not return anything if query is run 2012-04-03 16:00:00 but it is to return data if query is run 2012-04-03 18:01:00.  for now i'm dealing with this programatically but i would like to use a query for it.
jamppiAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

sachinpatil10dCommented:
Try this

select * from <TableName>
where convert(nvarchar,OnDateTime,108) between '18:00:00' and '23:00:00'
and convert(nvarchar,OffDateTime,108) between '18:00:00' and '23:00:00'
and convert(nvarchar,OnDateTime,101) between '04/02/2012' and '12/01/2012' 
and convert(nvarchar,OffDateTime,101) between '04/02/2012' and '12/01/2012' 

Open in new window

0
sachinpatil10dCommented:
Or

select * from <TableName>
where (convert(nvarchar,OnDateTime,108) >= '18:00:00' and convert(nvarchar,OffDateTime,108) <= '23:00:00')
and (convert(nvarchar,OnDateTime,101) >= '04/02/2012' and  convert(nvarchar,OffDateTime,101) <= '12/01/2012')

Open in new window

0
lluddenCommented:
Do OnDateTime and OffDateTime represent periods that you need to see if they intersect with the periods you are looking at?

If OnDateTime = '2012-04-02 17:00:00' AND OffDateTime = '2012-04-03 02:00:00' would it show up?
Are both fields on the same row in the table?

For instance, we use similar fields when doing resource tracking, and need to see whomever had a resource during each shift.  There are four options:
1. Have it assigned prior to shift and keep until after shift
2. Have it assigned prior to shift and return it during shift.
3. Have it assigned during shift and return after shift
4. Have it assigned during shift and returned during shift.

Which conditions are you looking for?
0
Protecting & Securing Your Critical Data

Considering 93 percent of companies file for bankruptcy within 12 months of a disaster that blocked access to their data for 10 days or more, planning for the worst is just smart business. Learn how Acronis Backup integrates security at every stage

jamppiAuthor Commented:
OndateTime                        OffDateTime                    Data
2012-04-02 18:00:00          2012-10-02 21:00:00        test 1
2012-04-02 19:00:00          2012-10-02 21:00:00        test 2
2012-04-02 20:00:00          2012-10-02 21:00:00        test 3
2012-04-02 21:00:00          2012-10-02 22:00:00        test 4
2012-04-03 18:00:00          2012-10-02 23:00:00        test 5

If I'm querying the database at 2012-04-02 12:00:00 (getdate())  it should not return anything as you can see.

But if I'm querying at  2012-04-03 19:01:00   i should get  test1 and test 2

I hope this clarifies the question
0
lluddenCommented:
I am still not 100% sure of what you want, but here is a try.  If this isn't it, post the code you are using and I can convert it to a query.

DECLARE @T1 TABLE (OnDatTime DATETIME, OffDateTime DATETIME, Data VARCHAR(10))
INSERT INTO @T1 
SELECT '2012-04-02 18:00:00', '2012-10-02 21:00:00','test 1' UNION
SELECT '2012-04-02 19:00:00', '2012-10-02 21:00:00','test 2' UNION
SELECT '2012-04-02 20:00:00', '2012-10-02 21:00:00','test 3' UNION
SELECT '2012-04-02 21:00:00', '2012-10-02 22:00:00','test 4' UNION
SELECT '2012-04-03 18:00:00', '2012-10-02 23:00:00','test 5'

DECLARE @QueryAsOf datetime = '2012-04-03 19:01:00'

SELECT Data FROM @T1 T1
WHERE cast(convert(VARCHAR(5),@QueryAsOf,108) AS DATETIME) BETWEEN cast(convert(VARCHAR(5),OnDatTime,108) AS DATETIME) AND cast(convert(VARCHAR(5),OffDateTime,108) AS DATETIME)
AND DATEADD(DAY, DATEDIFF(DAY, 0, T1.OnDatTime), 0) < DATEADD(DAY, DATEDIFF(DAY, 0, @QueryAsOf), 0)

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
jamppiAuthor Commented:
Perfect!
Thank you for the quick solution.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft SQL Server

From novice to tech pro — start learning today.