日期:2014-05-18  浏览次数:20603 次

日期的时间相加哪里出的问题?
我想给一个日期(只有日期没有时分秒)例如题中的‘2007-10-1’把当前时间的时分秒加给它,如果做了如下的操作:
declare 
@now datetime, --定义了一个时间
@hms datetime, --要提取时分秒的当前时间
@h int, --小时
@m int, --分
@s int, --秒
@ms int --毫秒

set @hms=getdate() --@hms中存入当前日期时间
select @hms hms

set @now='2007-10-1' --给@now赋一个任意值,最后我要得到它不光有日期还要有时间的显示
select @now now,@hms hms
----
set @h=datepart(hour,@hms) --提取小时
select @h h
set @now=dateadd(hour,@h,@now) --加上

set @m=datepart(minute,@hms) --提取分钟
select @m m
set @now=dateadd(minute,@m,@now)

set @s=datepart(second,@hms) --提取秒
select @s s
set @now=dateadd(second,@s,@hms)

set @ms=datepart(millisecond,@hms) --提取毫秒
select @ms ms
set @now=dateadd(millisecond,@ms,@now)
--显示最后结果
select @hms
select @now now
go


得到的值很奇怪
比如
开始时候now是2007-10-1
getdate()=2007-10-17 20:23:50.590
但是相加之后now的值成了
2007-10-1 20:24:41.180


请问这多出来一点时间怎么回事?


------解决方案--------------------
SQL code
declare @date datetime,@getdate datetime,
@h int,  --小时 
@m int,  --分 
@s int,  --秒 
@ms int  --毫秒 

select @getdate=getdate(),@date='2007-10-1'


select @h=datepart(hh,@getdate),@m=datepart(n,@getdate),@s=datepart(s,@getdate),@ms=datepart(ms,@getdate)

select @getdate as 当前时间,dateadd(ms,@ms,dateadd(s,@s,dateadd(n,@m,dateadd(hh,@h,@date)))) as 计算时间

当前时间                                                   计算时间                                                   
------------------------------------------------------ ------------------------------------------------------ 
2007-10-18 20:38:43.043                                2007-10-01 20:38:43.043

(所影响的行数为 1 行)