// 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