日期:2014-05-19  浏览次数:20527 次

时间精确和转换的问题..
declare   @startTime   datetime
declare   @endTime   datetime
declare   @s_1   char(10)
declare   @s_2   char(10)
      set   @s_1   =   '00:00:00 '
      set   @s_2   = '59:59:00 '
      set   @startTime= '2004-05-26 '
      set   @endTime   =   '9999-12-31 '

select   surveypointno,avg(middlevalue1)   as   minddlevalue1,avg(finalvalue1)   as   finalvalue1   into   #a   from   a11czzk1  
where   surveytime   between   @starttime   and   @endtime
group   by   surveypointno

select   surveypointno,avg(middlevalue1)   as   minddlevalue1,avg(finalvalue1)   as   finalvalue1   into   #b   from   a11czzk1  
where   surveytime   between   @starttime     and   dateadd(day,10,@starttime)
group   by   surveypointno

select   surveypointno,avg(middlevalue1)   as   minddlevalue1,avg(finalvalue1)   as   finalvalue1   into   #c   from   a11czzk1  
where   surveytime   >   dateadd(day,10,@starttime)   and     surveytime   <   =   dateadd(day,20,@starttime)
group   by   surveypointno

select   surveypointno,avg(middlevalue1)   as   minddlevalue1,avg(finalvalue1)   as   finalvalue1   into   #d   from   a11czzk1  
where   surveytime   >     dateadd(day,20,@starttime)   and     surveytime   <=   @endtime,20)
group   by   surveypointno

我想在where里面把@starttime和@endtime精确到秒,而不是在set里面,而且不能漏数据.应该怎么整各位大侠拜托了.谢谢啊```在线跪等中...

------解决方案--------------------
是不是這個意思?

select surveypointno,avg(middlevalue1) as minddlevalue1,avg(finalvalue1) as finalvalue1 into #a from a11czzk1
where surveytime between @starttime + ' ' + @s_1 and @endtime + ' ' + @s_2
group by surveypointno
------解决方案--------------------
declare @startTime datetime
declare @endTime datetime
declare @s_1 char(10)
declare @s_2 char(10)
set @s_1 = '00:00:00 '
set @s_2 = '23:59:59 ' --這裡需要修改
set @startTime= '2004-05-26 '
set @endTime = '9999-12-31 '


where surveytime between @starttime and @endtime

改成

where surveytime between @starttime + ' ' + @s_1 and @endtime + ' ' + @s_2

這個就可以了


查詢的區間就變為了 "2004-05-26 00:00:00.000 " And "9999-12-31 23:59:59.000 "
------解决方案--------------------
set @s_1 = '00:00:00 '
set @s_2 = '59:59:00 '
set @startTime= '2004-05-26 '
set @endTime = '9999-12-31 '

where surveytime between @starttime and @endtime
surveytime 如果不是DateTime类型转化成datetime类型,这样出的数据是在 '2004-05-26 00:00:00 '之后的数据,相当于 加上@startTime+ ' '+@s_1
如果datetime类型数据没有时间只有日期 系统会自行加上时间 是 '00:00:00 '
------解决方案--------------------
可以这样:
CONVERT(nchar(19),surveytime,120) between @starttime + ' '+@s_1 and @endtime + ' '+@s_2

格式要一致,不然统计不出数据的。

如set @startTime= '2004-05-26 ' 不能写成set @startTime= '2004-5-26 ' 因为经过CONVERTCONVERT