Solved

# CAST(date_column + time_column as datetime)

Posted on 2016-07-27
43 Views
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)
``````

Jim
0
Question by:Jim Horn
[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

LVL 13

Assisted Solution

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

LVL 6

Expert Comment

ID: 41731781
CAST(@dt + @tm AS DATETIME) with space in first position in time
0

LVL 13

Expert Comment

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
``````
``````SELECT dbo.concatDT(@dt,@tm)
``````
0

LVL 69

Accepted Solution

Scott Pletcher earned 250 total points
ID: 41731997
SELECT CAST(@dt AS datetime) + @tm
0

LVL 13

Expert Comment

ID: 41732007
I tried:
``````Declare @dt date = '20160727', @tm time = '03:30:00'
SELECT CAST(@dt AS datetime) + @tm
``````
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)
``````

does work and is less code than mine.
0

LVL 69

Expert Comment

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

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

LVL 13

Expert Comment

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

Question has a verified solution.

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

### Suggested Solutions

export sql server dbs 2 26
SQL syntax for max(date) 3 37
SQL Percentage Formula 7 33
What is needed to become a DBA? 7 52
Ever needed a SQL 2008 Database replicated/mirrored/log shipped on another server but you can't take the downtime inflicted by initial snapshot or disconnect while T-logs are restored or mirror applied? You can use SQL Server Initialize from BackupâŠ
The Delta outage: 650 cancelled flights, more than 1200 delayed flights, thousands of frustrated customers, tens of millions of dollars in damages â plus untold reputational damage to one of the worldâs most trusted airlines. All due to a catastrophâŠ
Using examples as well as descriptions, and references to Books Online, show the different Recovery Models available in SQL Server and explain, as well as show how full, differential and transaction log backups are performed
Via a live example, show how to setup several different housekeeping processes for a SQL Server.
###### Suggested Courses
Course of the Month6 days, 12 hours left to enroll