Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Query Date and Time in Different Columns

Posted on 2008-06-16
4
Medium Priority
?
645 Views
Last Modified: 2008-06-16
I have a table that has a modified Julean date stored as a varchar in one column and a time value stored as a varchar in another column.  I would like to be able to query for all values that are between a start date/time and an end date/time.  For example if my start date is 108152 and start time is 175945 and my end date is 108155 and end time is 085500 then I would like all of the values inbetween.  Please provide me with an example where statement.
0
Comment
Question by:schlepuetz
  • 2
4 Comments
 
LVL 71

Accepted Solution

by:
Qlemo earned 500 total points
ID: 21795385
1. if your time and date values are right aligned, you can simply concatenate both to compare:

where juldate + ' ' + jultime between '108152 175945' and '108155 085500'

Otherwise, you will have to convert time and date to number, and compare those:

where convert(float, juldate) + convert(float, jultime)/240000 between ... and ...

I left some stuff to your imagination ;-)

BTW: Bad idea, storing date/time values in varchar ....
0
 
LVL 3

Author Comment

by:schlepuetz
ID: 21795460
I agree with the bad idea thing but that is the nature of the beast when dealing with other people's stuff.  Let me give your suggestions a whirl.
0
 
LVL 51

Expert Comment

by:Mark Wills
ID: 21795802
Time seems to be straight time - 24 hour clock...  So, try these... and convert either Julian to date or date to julian and compare time seperately....

-- JULIAN TO SQL SERVER
declare @date char(10)
set @date=108152
select dateadd(dd,@date-(@date/1000)*1000-1, convert(datetime,'01/01/'+ right(convert(varchar,@date/1000),2))) as Date_From_Julian

-- SQL SERVER DATE TO JULIAN
declare @date datetime
set @date=getdate()
select (100+year(@date)-2000)*1000+ datediff(d, convert(datetime,('01/01/'+convert(char(4),year(@date)))),@date)+1 as Date_To_Julian
 
-- TIME
declare @date datetime
set @date=getdate()
select replace(convert(varchar,@date,108),':','')   --or 114
0
 
LVL 3

Author Comment

by:schlepuetz
ID: 21796702
Here is final solution that I used.
cast([Date]as varchar(6)) + right('000000' + cast([Time]as varchar(6)),6)

I used the right to make sure that I had the same number for the times as some of ny times where not the full 6 characters.

Sorry mark wills I had tried before converting the date and time to normal date time values but the query was too slow.  The difference was 15 seconds versus 2 seconds.

Thanks Qlemo for the push in the right direction!
0

Featured Post

Learn Veeam advantages over legacy backup

Every day, more and more legacy backup customers switch to Veeam. Technologies designed for the client-server era cannot restore any IT service running in the hybrid cloud within seconds. Learn top Veeam advantages over legacy backup and get Veeam for the price of your renewal

Question has a verified solution.

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

If you find yourself in this situation “I have used SELECT DISTINCT but I’m getting duplicates” then I'm sorry to say you are using the wrong SQL technique as it only does one thing which is: produces whole rows that are unique. If the results you a…
Use this article to create a batch file to backup a Microsoft SQL Server database to a Windows folder.  The folder can be on the local hard drive or on a network share.  This batch file will query the SQL server to get the current date & time and wi…
Integration Management Part 2
In response to a need for security and privacy, and to continue fostering an environment members can turn to for support, solutions, and education, Experts Exchange has created anonymous question capabilities. This new feature is available to our Pr…

782 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