一个存储过程的机试

  题目大体意思如下:

  比如淘宝上我要买东西,我要求是2012-07-25日到货,假设运输需要10天的时间,25日没有到则我不签收了,不支付钱了。假设淘宝上的店家周六周日不上班,不发货,也就是说如果我要25日到货,你需要运输10天,10天前刚好是周末,而周末是不发货的,那么就要提前发货,运输时间可能只要1天,可能是2天,也可能是半个月,请你写一个SQL的存储过程查询提前到那一天发货好呢?

  我是这样的做的:

create proc P_GetShipmentsDate
@ArriveDate datetime,
@Days int
as
    select (
    --如果要到达的时间减去运输时间是周六则提前一天也就是周五发货
    case when DATEPART(DW,DATEADD(D,-@Days,@ArriveDate))=7 then DATEADD(D,-1,DATEADD(D,-@Days,@ArriveDate))
    --如果是周日则提前二天发货
    when DATEPART(DW,DATEADD(D,-@Days,@ArriveDate))=1 then DATEADD(D,-2,DATEADD(D,-@Days,@ArriveDate))
    --其它的时间则是到达时间减去运输的时间那天发货
    else DATEADD(D,-@Days,@ArriveDate)
     end)
go
--11日前三刚好是星期日,所以要提前到周五货
exec P_GetShipmentsDate '2012-07-11',3

咱觉得有效率不是很高,各位高手有什么好的写法,还请赐教,小弟感激不尽。。。

转载于:https://www.cnblogs.com/koeltp/archive/2012/07/11/2587213.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值