I have a field in my table which stores dates and times in datetime format. I want to get the data from 10 p.m....
to 6 a.m. between 1st July and 31st July. What's the best way to get this data?
This is one of the few times where having separate DATE and TIME columns would be beneficial.
select columns from table where datecol between '2007-07-01' and '2007-07-31' and ( timecol >= '22:00' or timecol <= '06:00' )
With a DATETIME column, however, it's a little trickier. We need to "extract" the time portion of the DATETIME values. The query would look something like this:
select columns from table where datetimecol >= '2007-07-01' and datetimecol < '2007-08-01' and ( extract(hour from datetimecol) >= 22 or extract(hour_minute from datetimecol) <= '06:00' )
Exact syntax will depend on which database system you're using. Notice how the range test for the dates uses an open-ended interval.
Dig Deeper on Oracle and SQL
Related Q&A from Rudy Limeback
Read SQL expert Rudy Limeback's advice for counting combinations in a table with SQL's GROUP BY clause Continue Reading
Read about the Mimer Validator, a tool used to verify your SQL code, in this tip from SQL expert Rudy Limeback. Continue Reading
Read an example of an SQL case expression from our SQL expert Rudy Limeback. Continue Reading