【发布时间】:2016-12-31 14:42:19
【问题描述】:
我在表startdate 和enddate 中有两列,我需要创建一个函数获取所有ID,它位于函数中传递的日期数据之间。
我的函数输入参数是
@Year int,
@Month int = null,
@Quarter int = null
现在如果月份是null,我只需要检查简单的日期,但是如果提供月份,如何检查它是否位于startdate 和enddate 之间,否则如果提供@Quarter,我需要检查一年中的 3 个月是否与 startdate 和 enddate 冲突。
我现在写的是
CREATE FUNCTION GetAssociatesEmpID(
@Year int,
@Month int = null,
@Quarter int = null
)
RETURNS TABLE
AS BEGIN
IF @Month IS NOT NULL -- Monthly Statistics
BEGIN
END
ELSE IF @Quarter IS NOT NULL -- Quarterly Statistics
BEGIN
END
ELSE -- Yearly Statistics
BEGIN
return SELECT ID FROM Table WHRER @Year>=YEAR(startdate) AND @Year<=YEAR(enddate)
END
END
请帮助我了解月份和季度的情况
Quarter 有 4 个可能的 inut 范围在 1-4 之间
它的月份范围在@Quarter*3-3和@Quarter*3之间
【问题讨论】:
-
YEAR(@Year)没有任何意义,@Year已经是INT -
@Lamak oh mybad 谢谢指点
-
2016 年 1 月是否介于 2016-01-30 和 2016-02-02 之间?
-
@MikeSherrill'CatRecall' 是的
-
看起来您只是想检查两个间隔是否重叠。第一个间隔在
startdate和enddate之间。第二个间隔由过程的参数定义。使用多个IFs将您的@Year、@Month、@Quarter参数转换为两个正确的日期,然后检查是否重叠。
标签: sql-server sql-server-2008 date sql-date-functions