使用Server 2008
根据指定的日期,如果下一个星期五在下一个月,我需要查找下一个星期五或该月份最后一天的日期。与函数相反,它更倾向于内联SQL,但将接受我所能得到的内容。
示例:
2013年10月份:
2013年10月3日的日期将返回2013年4月10日(下个星期五) 2013年10月14日将返回2013年10月18日(下个星期五) 2013年10月25日的日期将返回2013年10月25日(今天是星期五) 2013年10月29日将返回2013年10月31日(下个星期五是下个月的最后一天)
发布于 2013-10-24 14:43:07
我不是SQL server方面的专家,但这会让您更接近。将其放入SQL函数中:
DECLARE @date DATETIME = '10/03/2013';
SELECT MIN(Date) AS NextFridayOrEoMonth
FROM ( SELECT DATEADD(DAY, ( CASE DATEPART(DW, @date)
WHEN 7 THEN 6
ELSE 6 - DATEPART(DW, @date)
END ), @date) AS Date
UNION
SELECT DATEADD(s, -1, DATEADD(mm, DATEDIFF(m, 0, @date) + 1, 0)) AS Date
) AS dates;编辑:实际上是,这里是一个函数。祝好运!
CREATE FUNCTION dbo.NextFridayOrEoMonth ( @date DATETIME )
RETURNS DATETIME
WITH SCHEMABINDING,
RETURNS NULL ON NULL INPUT
AS
BEGIN
DECLARE @result DATETIME;
SELECT @result = MIN(Date)
FROM ( SELECT DATEADD(DAY, ( CASE DATEPART(DW, @date)
WHEN 7 THEN 6
ELSE 6 - DATEPART(DW, @date)
END ), @date) AS Date
UNION
SELECT DATEADD(s, -1, DATEADD(mm, DATEDIFF(m, 0, @date) + 1, 0)) AS Date
) AS dates;
RETURN @result;
END
GO
SELECT dbo.NextFridayOrEoMonth('10/3/2013') AS NextFridayOrEoMonth; -- 2013-10-04
SELECT dbo.NextFridayOrEoMonth('10/5/2013') AS NextFridayOrEoMonth; -- 2013-10-11
SELECT dbo.NextFridayOrEoMonth('10/14/2013') AS NextFridayOrEoMonth; -- 2013-10-18
SELECT dbo.NextFridayOrEoMonth('10/25/2013') AS NextFridayOrEoMonth; -- 2013-10-25
SELECT dbo.NextFridayOrEoMonth('10/26/2013') AS NextFridayOrEoMonth; -- 2013-10-31
SELECT dbo.NextFridayOrEoMonth('10/29/2013') AS NextFridayOrEoMonth; -- 2013-10-31
GO注释:感谢代码评审/评论。
https://stackoverflow.com/questions/19568863
复制相似问题