在SqlServer中计算日期周期

 

    最近在开发一个计量信息系统,数据库使用 SqlServer 。计量器具需要定期的进行校准 / 检定。

设计了一个器具表: MetroIntraImpl ,其中有

 

 

  • 字段 MetroDate 表示上次校准 / 检定日期
  • 字段 MetroCycle 表示校准 / 检定周期
  • 字段 MetroCycleUnit 表示校准 / 检定周期单位,可以为年月日等。

 

    由此三个字段,客户会希望得到器具下次的拟校准 / 检定日期。

 

    为此,设计一个视图,视图的 Sql 为:

SELECT dbo.MetroIntraImpl.*,
CASE
WHEN MetroDate IS NULL THEN NULL
WHEN Len(LTRIM(MetroDate)) = 0 THEN NULL
ELSE
  CASE MetroCycleUnit
      WHEN '年' THEN DATEADD(Year,    MetroCycle, CONVERT(datetime, MetroDate))
      WHEN '月' THEN DATEADD(Month, MetroCycle, CONVERT(datetime, MetroDate))
      WHEN '日' THEN DATEADD(Day,     MetroCycle, CONVERT(datetime, MetroDate))
      ELSE DATEADD(Month, MetroCycle,CONVERT(datetime, MetroDate))
  END
END 
AS MetroDateNext
FROM dbo.MetroIntraImpl

 

 

 

    访问此视图的 MetroDateNext 字段即可获得器具的下次拟校准 / 检定日期。

 

    参看 SqlServer 的在线帮助, DATEADD 的第一个参数还是其他的一些值,如季度、小时等。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值