有一个需求表XSales
字段
ID 编号
wlh 物料号
feipei 分配给某位采购名
feipeitime 分配时间ID wlh feipei feipeitime
1 adb ken 2009-11-19 11:50:42
2 342 tom 2009-11-19 15:50:42我的意思是一条需求在分配五个小时后采购员的名字变成all,要控制在工作的八个小时内(9:00到18:00)
比如上面的第一条需求当当前时间到了2009-11-19 16:50:42后KEN就变成all
sql="update XSales set feipei='all' where feipeitime<=DateAdd(hour,-5,getdate())",这条语句可以实现上面的,
但是第2条需求在晚上20点后就变成了all,我想实现的是到第二天的工作时间第2条需求还有三个小时,从上午9点开始算起,第2条需求应该在第二天的11:50后才变成all,
就是要去掉晚上的时间(18:00-9:00)才来统计。
恳请大家帮忙了
字段
ID 编号
wlh 物料号
feipei 分配给某位采购名
feipeitime 分配时间ID wlh feipei feipeitime
1 adb ken 2009-11-19 11:50:42
2 342 tom 2009-11-19 15:50:42我的意思是一条需求在分配五个小时后采购员的名字变成all,要控制在工作的八个小时内(9:00到18:00)
比如上面的第一条需求当当前时间到了2009-11-19 16:50:42后KEN就变成all
sql="update XSales set feipei='all' where feipeitime<=DateAdd(hour,-5,getdate())",这条语句可以实现上面的,
但是第2条需求在晚上20点后就变成了all,我想实现的是到第二天的工作时间第2条需求还有三个小时,从上午9点开始算起,第2条需求应该在第二天的11:50后才变成all,
就是要去掉晚上的时间(18:00-9:00)才来统计。
恳请大家帮忙了
根据这个例子可以写出滴
if OBJECT_ID('tb') is not null drop table tb
if OBJECT_ID('tb1') is not null drop table tb1GO CREATE TABLE tb(
ID INT,
wlh varchar(10) ,
feipei varchar(10),
feipeitime datetime,
EndDateTime datetime
)
GO
alter function getEndTime(@StartTime DateTime)
returns DateTime
as
begin
Declare @Diff int
if datediff(SECOND,dateadd(Hour,5,@StartTime),cast((Convert(varchar(10),@StartTime,120)+' 18:00:00') as datetime))<0
begin
Set @Diff=datediff(MINUTE,@StartTime,cast((Convert(varchar(10),@StartTime,120)+' 18:00:00') as datetime))
SET @StartTime=dateadd(Day,1,@StartTime);
SET @StartTime=dateadd(MINUTE,@Diff,cast((Convert(varchar(10),@StartTime,120)+' 9:00:00')as datetime))
end
else
begin
set @StartTime= dateadd(Hour,5,@StartTime)
end
return @StartTime
end GOinsert into tb(ID,wlh,feipei,feipeitime,EndDateTime)values(
1,'adb','ken','2009-11-19 11:50:42',dbo.getEndTime('2009-11-19 11:50:42'))insert into tb(ID,wlh,feipei,feipeitime,EndDateTime)values(
2,'342','tom','2009-11-18 15:50:42',dbo.getEndTime('2009-11-18 15:50:42'))GOselect
a.ID,
a.wlh,
case when DATEDIFF(MINUTE,a.EndDateTime,cast(GETDATE()as datetime))>=0 then 'ALL' else a.feipei end as feipei,
feipeitime,
a.EndDateTime
from tb aID wlh feipei feipeitime EndDateTime
----------- ---------- ---------- ----------------------- -----------------------
1 adb ken 2009-11-19 11:50:42.000 2009-11-19 16:50:42.000
2 342 ALL 2009-11-18 15:50:42.000 2009-11-19 11:10:00.000(2 行受影响)
这样可以不?在新增的时候就算出什么时候要变成ALL,以后查询的时候判断当前时间是否超过 EndDateTime
如果超过就显示"ALL"否则 就显示原来的。。新手,保留个人看法
我用这个语句可以控制下午3点到4点加19个小时 update XSales set feipei='all' where getdate()>=DateAdd(hour,19,feipeitime) and datepart(hh,feipeitime) between 15 and 16
下午4点到5点 就加20 下午5点到6点就加21个小时 上午9点到下午3点的 就加5个小时 但要写四个这样的语句很麻烦执行速度肯定也慢, 请问用case when 怎么写呢 case when 可以接在where语句后面吗
可以
set rs=server.createobject("adodb.recordset")
sql="update XSales set feipei='all' where feipeitime<=DateAdd(hour,-19,getdate()) and datepart(hh,feipeitime) between 15 and 19"
rs.open sql,conn,1,3
rs.Close
set rs=nothing
set rs=server.createobject("adodb.recordset")
sql="update XSales set feipei='all' where feipeitime<=DateAdd(hour,-5,getdate())"
rs.open sql,conn,1,3
rs.Close
set rs=nothing怎么用 case when 语句 把上面的合并成一条语句呢 题目还是上面的题目 谢谢