Solved

Converting a text description of time to an ordinary Datetime value in SQL 2008

Posted on 2011-02-23
3
339 Views
Last Modified: 2012-05-11
I want to convert a varchar expression describing time into a date time value.  I will be given descriptions like this:  2010D320HR22MIN23
Which means the 320th day of Year 2010, Hour 22, Minute 23.
It may be equivalent to a string like this:
2010-10-19 22:23:00.0000000  
(Assuming 10-19 is the 320th day of 2010, I'm not sure if this is right)
So what I want is a function that takes 2010D320HR22MIN23 as input
and returns 2010-11-19 22:23:00.0000000  

I don't see any function that converts day of year to month and day. Is there one?  Or must one be built from scratch? Or is there another way of doing this?

Thanks,

C




0
Comment
Question by:cipriano555
  • 2
3 Comments
 
LVL 15

Expert Comment

by:derekkromm
ID: 34965472
declare @x varchar(100)
set @x = '2010D320HR22MIN23'

declare @y datetime
select @y = 
	dateadd(
		mi,
		convert(int,  right(@x, len(@x) - charindex('MIN', @x)-2)), 
		dateadd(
			hh, 
			convert(int, right(left(@x, charindex('MIN', @x)-1), len(left(@x, charindex('MIN', @x)-1)) - charindex('HR', @x)-1)), 
			dateadd(
				dd, 
				convert(int, right(left(@x, charindex('HR', @x)-1), len(left(@x, charindex('HR', @x)-1)) - 5)), 
				convert(datetime, '1/1/' + left(@x, 4)))))
select @y

Open in new window

0
 
LVL 15

Accepted Solution

by:
derekkromm earned 500 total points
ID: 34965497
Obviously replace all instances of @x with the name of your variable or description column.

And actually, a small error since it starts on 1/1/YY and adds days, it'll be 1 day too far ahead from that original query. Updated:

declare @x varchar(100)
set @x = '2010D1HR22MIN23'

declare @y datetime
select @y = 
	dateadd(
		mi,
		convert(int,  right(@x, len(@x) - charindex('MIN', @x)-2)), 
		dateadd(
			hh, 
			convert(int, right(left(@x, charindex('MIN', @x)-1), len(left(@x, charindex('MIN', @x)-1)) - charindex('HR', @x)-1)), 
			dateadd(
				dd, 
				convert(int, right(left(@x, charindex('HR', @x)-1), len(left(@x, charindex('HR', @x)-1)) - 5)) - 1, 
				convert(datetime, '1/1/' + left(@x, 4)))))
select @y

Open in new window

0
 

Author Closing Comment

by:cipriano555
ID: 34965602
Thank you so much for your help
0

Featured Post

Optimizing Cloud Backup for Low Bandwidth

With cloud storage prices going down a growing number of SMBs start to use it for backup storage. Unfortunately, business data volume rarely fits the average Internet speed. This article provides an overview of main Internet speed challenges and reveals backup best practices.

Question has a verified solution.

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

Suggested Solutions

PL/SQL can be a very powerful tool for working directly with database tables. Being able to loop will allow you to perform more complex operations, but can be a little tricky to write correctly. This article will provide examples of basic loops alon…
Ever notice how you can't use a new drive in Windows without having Windows assigning a Disk Signature?  Ever have a signature collision problem (especially with Virtual Machines?)  This article is intended to help you understand what's going on and…
Windows 8 comes with a dramatically different user interface known as Metro. Notably missing from the new interface is a Start button and Start Menu. Many users do not like it, much preferring the interface of earlier versions — Windows 7, Windows X…
With the advent of Windows 10, Microsoft is pushing a Get Windows 10 icon into the notification area (system tray) of qualifying computers. There are many reasons for wanting to remove this icon. This two-part Experts Exchange video Micro Tutorial s…

770 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