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

急问一个实战性非常强的SQL,高手进,在线等!!!!30分,只有这些了。
//   A表有字段
input_date:录入时间   格式:yyyy/mm/dd   hh:mm:ss  

想求每条纪录离现在有几个小时,
但要注意:
一定要过滤
[录入时间]后到GETDATE()间的
每天下午16:30-第二天早上8:00,

举个例子:
input_date:2007/01/09   15:30:00   录入的数据
到   2007/01/10   10:50:00

应该是4小时。(每天下午16:30-第二天早上8:00过滤)

============================
如何修改下列语句:
SELECT   DATEDIFF(Hour,   input_date,   GETDATE())   AS   Hours

FROM   A




------解决方案--------------------
--try

SELECT DATEDIFF(Hour, input_date, GETDATE())-datediff(day, input_date, getdate())*15 AS Hours

FROM A
------解决方案--------------------
declare @dt1 datetime, @dt2 datetime
select @dt1= '2007/01/09 15:30:00 ', @dt2= '2007/01/10 10:50:00 '
SELECT DATEDIFF(Hour, @dt1, @dt2)-datediff(day, @dt1, @dt2)*15 AS Hours

--result
Hours
-----------
4

(1 row(s) affected)


------解决方案--------------------
declare @input_date datetime, @dt2 datetime
select @input_date= '2007/01/09 5:30:00 ', @dt2=getdate()
if @input_date <convert(varchar(10),@input_date)+ ' 08:00:00 '
select @input_date=convert(varchar(10),@input_date)+ ' 08:00:00 '
if @dt2> convert(varchar(10),@dt2)+ ' 16:30:00 '
select @dt2=convert(varchar(10),@dt2)+ ' 16:30:00 '

SELECT DATEDIFF(Hour, @input_date, @dt2)-datediff(day, @input_date, @dt2)*16 AS Hours

------解决方案--------------------
declare @input_date datetime, @dt2 datetime
select @input_date= '2007/01/11 14:30:00 ', @dt2=getdate()
if @input_date <convert(varchar(10),@input_date)+ ' 08:00:00 '
select @input_date=convert(varchar(10),@input_date)+ ' 08:00:00 '
if @input_date> convert(varchar(10),@input_date)+ ' 16:30:00 '
begin
select @input_date=convert(varchar(10),@input_date)+ ' 08:00:00 '
select @input_date=dateadd(day,1,@input_date)
end
if @dt2> convert(varchar(10),@dt2)+ ' 16:30:00 '
begin
select @dt2=convert(varchar(10),@dt2)+ ' 16:30:00 '
select @dt2=dateadd(day,1,@dt2)
end
if @dt2 <convert(varchar(10),@dt2)+ ' 08:00:00 '
select @dt2=convert(varchar(10),@dt2)+ ' 08:00:00 '

SELECT DATEDIFF(Hour, @input_date, @dt2)-datediff(day, @input_date, @dt2)*16 AS Hours