最近在开发一个计量信息系统,数据库使用 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 的第一个参数还是其他的一些值,如季度、小时等。