首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >server 2008查找下星期五或月份的最后一天

server 2008查找下星期五或月份的最后一天
EN

Stack Overflow用户
提问于 2013-10-24 14:33:54
回答 1查看 3.7K关注 0票数 2

使用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日(下个星期五是下个月的最后一天)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-24 14:43:07

我不是SQL server方面的专家,但这会让您更接近。将其放入SQL函数中:

代码语言:javascript
复制
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;

编辑:实际上是,这里是一个函数。祝好运!

代码语言:javascript
复制
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

注释:感谢代码评审/评论。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19568863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档