Solved

CAST(date_column + time_column as datetime)

Posted on 2016-07-27
8
27 Views
Last Modified: 2016-07-27
Hi guys

Question for you:  What's the fastest way to add a date column and a time column and cast it as a single datetime column?

Example:
Declare @dt date = '20160727', @tm time = '03:30:00'
SELECT CAST( ???? as datetime) 

Open in new window


Thanks in advance.
Jim
0
Comment
Question by:Jim Horn
8 Comments
 
LVL 12

Assisted Solution

by:Dustin Saunders
Dustin Saunders earned 250 total points
ID: 41731778
I use:
SELECT CONVERT(DATETIME, CONVERT(CHAR(8), @dt, 112) 
  + ' ' + CONVERT(CHAR(8), @tm, 108))

Open in new window

0
 
LVL 6

Expert Comment

by:Manuel Marienne-Duchêne
ID: 41731781
CAST(@dt + @tm AS DATETIME) with space in first position in time
0
 
LVL 12

Expert Comment

by:Dustin Saunders
ID: 41731811
But don't you need extra steps to add in the space in time (say if it were from a column)?  [maybe we should add physics to the categories if we're talking about spacetime :P ]

Anyways, I guess if I used it a lot I'd just stick it in a UDF and call that when needed (seems easiest for me though I don't know if there's a more performance efficient way?)

CREATE FUNCTION concatDT (@dt date,@tm time)
RETURNS datetime
AS
BEGIN
RETURN(	SELECT CONVERT(DATETIME, CONVERT(CHAR(8), @dt, 112) 
	+ ' ' + CONVERT(CHAR(8), @tm, 108)))
END

Open in new window

SELECT dbo.concatDT(@dt,@tm)

Open in new window

0
 
LVL 69

Accepted Solution

by:
ScottPletcher earned 250 total points
ID: 41731997
SELECT CAST(@dt AS datetime) + @tm
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 12

Expert Comment

by:Dustin Saunders
ID: 41732007
I tried:
Declare @dt date = '20160727', @tm time = '03:30:00'
SELECT CAST(@dt AS datetime) + @tm

Open in new window

and got:
Msg 402, Level 16, State 1, Line 2
The data types datetime and time are incompatible in the add operator.


but
Declare @dt date = '20160727', @tm time = '03:30:00'
SELECT CAST(@dt AS datetime) + CAST(@tm AS datetime)

Open in new window


does work and is less code than mine.
0
 
LVL 69

Expert Comment

by:ScottPletcher
ID: 41732066
I tried:
Declare @dt date = '20160727', @tm time = '03:30:00'
SELECT CAST(@dt AS datetime) + @tm
and got [an error]

Hmm, worked fine for me, at least through SQL 2012.  Maybe that's a later SQL version restriction?  I know they've made some changes in that area.
0
 
LVL 65

Author Closing Comment

by:Jim Horn
ID: 41732074
Thanks guys.  Chose Scott's answer as it was a less expensive option, which works on my 2008R2 box.
0
 
LVL 12

Expert Comment

by:Dustin Saunders
ID: 41732077
Yeah, I agree that's better way.  It's weird that it doesn't run on my SQL test servers (I tried on SQL 2012 SP3 and 2014); so must have appeared somewhere around there, or maybe I angered some vengeful SQL God.

Might be a good note or item to test though, in case you upgrade production SQL versions in the future it might break the query.
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

Having an SQL database can be a big investment for a small company. Hardware, setup and of course, the price of software all add up to a big bill that some companies may not be able to absorb.  Luckily, there is a free version SQL Express, but does …
This article explains how to reset the password of the sa account on a Microsoft SQL Server.  The steps in this article work in SQL 2005, 2008, 2008 R2, 2012, 2014 and 2016.
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 shrink a transaction log file down to a reasonable size.

743 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

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now