+2  A: 

Actually, the even correcter way of adding 7 hours to a datetime is to use DATEADD:

select getdate() as dt into #t1
select dt, dateadd(hh, 7, dt) as dt_new from #t1

gives

dt                      dt_new
----------------------- -----------------------
2010-10-25 13:16:35.067 2010-10-25 20:16:35.067
AakashM
+1 - this also drastically improves readability - a lot more obvious what the intention is
AdaTheDev
dateadd and other functions is not SARGable that's why i stick to Arifmetic's method. Especially when you add a constantto column - it could be taken into account by SQL Optimiser. dateadd - it's always TABLE scan.
zmische
@zmische your question features date manipulation only in the `SELECT` list, where I believe SARGability doesn't come into it - if you had said this was going to be in a `WHERE` clause, you might have got different answers...
AakashM
+2  A: 

You could also use the inbuilt functions, such as

select dt, DATEADD(hour, 7, dt) as dt_new from #t1

My guess as to the imprecision in using + is that its converting from datetime to integer, then back again.

PaulG
No it is not Integer - because I got almost correct result but with small difference. With integer i'd got the same as initial value because 1/something = 0 for Integer type. I suppose it used a numeric or somewhat.
zmische
+1  A: 

You could achieve better result with dateadd() function (like previous posters noted). If you want use arithmetics, use better datatype, like float - cast(7 as float) instead of 7. is working well.

Arvo