?
Solved

sql server - how to query specific time - T SQL

Posted on 2012-12-31
6
Medium Priority
?
376 Views
Last Modified: 2012-12-31
I have a timestamp field.
I need to query all the records for the hour.. A record for 1,2,3 o'clock.
The data looks like

2012-11-01 01:00:00
2012-11-01 01:15:00
2012-11-01 01:45:00
2012-11-01 02:00:00
2012-11-01 02:15:00
2012-11-01 03:00:00

How do query for the full hour?
0
Comment
Question by:JElster
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
6 Comments
 
LVL 22

Expert Comment

by:Steve Wales
ID: 38732995
This will give you the basic structure of the query:

select * from your_table
where column_name between convert(datetime, '2012-11-01 01:00:00', 120) and convert(datetime, '2012-11-01 02:00:00', 120)
0
 
LVL 48

Expert Comment

by:Dale Fye
ID: 38733050
Just so you understand, a TimeStamp field is not the same as a Date/Time field.  According to Microsoft:

"It is used as a mechanism for version-stamping table rows. The storage size is 8 bytes. The timestamp data type is just an incrementing number and does not preserve a date or a time. To record a date or time, use a datetime data type."
0
 
LVL 1

Author Comment

by:JElster
ID: 38733066
It's not a timestamp field... sorry for the confusion
Just a DATETIME
0
Get 15 Days FREE Full-Featured Trial

Benefit from a mission critical IT monitoring with Monitis Premium or get it FREE for your entry level monitoring needs.
-Over 200,000 users
-More than 300,000 websites monitored
-Used in 197 countries
-Recommended by 98% of users

 
LVL 69

Expert Comment

by:Scott Pletcher
ID: 38733240
Most important are:
1) not to perform any function on the column itself
2) not to count the same row more than once


I strongly recommend the style below for ALL date/datetime checks:

--query for 1AM rows only
WHERE
    datetime_column >= '20121101 01:00:00' AND
    datetime_column <  '20121101 02:00:00'


Leaving out the dashes prevents any conversion errors ('YYYYMMDD' is always interpreted correctly) and/or misunderstandings about what the date value represents.

Using >= and < rather than between avoids counting rows on the exact hour twice.
0
 
LVL 1

Author Comment

by:JElster
ID: 38733500
But I have many dates!



What about this...
First

SUBSTRING( CONVERT(nvarchar(30), TIMESTAMP, 120),15,5) AS DT

then

select ....   WHERE DT = '00:00'
0
 
LVL 69

Accepted Solution

by:
Scott Pletcher earned 2000 total points
ID: 38733536
If you just want to group a lot of rows by their hours only, ignoring dates, do as below.

Yes, it uses a function on the column, but when you want all values you have to:


SELECT
    HOUR(TIMESTAMP) AS HR,
    ...
FROM dbo.tablename
--OPTIONAL!: for example, all records for current year only
--WHERE
    --TIMESTAMP >= '20120101' AND TIMESTAMP < '20130101'
GROUP BY
    HOUR(TIMESTAMP)
ORDER BY
    HOUR(TIMESTAMP)



If you want to see days, but only one row per hour per day, you can do this:

SELECT
    DATEADD(HOUR, DATEDIFF(HOUR, 0, TIMESTAMP), 0) AS DT,
    ...
FROM dbo.tablename
--OPTIONAL!: for example, all records for current year only
--WHERE
    --TIMESTAMP >= '20120101' AND TIMESTAMP < '20130101'
GROUP BY
    DATEADD(HOUR, DATEDIFF(HOUR, 0, TIMESTAMP), 0)
ORDER BY
    DATEADD(HOUR, DATEDIFF(HOUR, 0, TIMESTAMP), 0)
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Why is this different from all of the other step by step guides?  Because I make a living as a DBA and not as a writer and I lived through this experience. Defining the name: When I talk to people they say different names on this subject stuff l…
Recently we ran in to an issue while running some SQL jobs where we were trying to process the cubes.  We got an error saying failure stating 'NT SERVICE\SQLSERVERAGENT does not have access to Analysis Services. So this is a way to automate that wit…
This videos aims to give the viewer a basic demonstration of how a user can query current session information by using the SYS_CONTEXT function
Via a live example, show how to backup a database, simulate a failure backup the tail of the database transaction log and perform the restore.
Suggested Courses

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question