首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sql server中给定月份的上星期五

sql server中给定月份的上星期五
EN

Stack Overflow用户
提问于 2012-12-21 18:45:28
回答 4查看 12.2K关注 0票数 9

如何在T-SQL中获取该月的上个星期五的日期?

我将把年份和月份作为参数传递,例如,201211。如果我传递'201211‘作为参数,它应该返回'20121130’作为答案,因为它是‘12’11月的最后一个星期五的日期。

EN

回答 4

Stack Overflow用户

发布于 2012-12-21 19:17:43

1900年1月5日是一个星期五。它使用该基准日期并计算任何给定月份中的最后一个星期五,但是您必须为它提供一个该月内的日期,而不仅仅是该月本身。将其中的2012-12-01替换为您的月份中的日期

代码语言:javascript
复制
SELECT DATEADD(DY,DATEDIFF(DY,'1900-01-05',DATEADD(MM,DATEDIFF(MM,0,'2012-12-01'),30))/7*7,'1900-01-05')

你也可以通过用1900-01-06替换1900-01-05来获取最后一个星期六,等等。

票数 11
EN

Stack Overflow用户

发布于 2012-12-21 23:09:24

使用calendar table会简单得多;在根据自己的需要创建适当的列之后,您只需编写以下代码:

代码语言:javascript
复制
select 
    max([Date])
from 
    dbo.Calendar
where 
    YearAndMonth = 201211 and 
    DayOfWeek = 'Friday'

在确定日期时,日历表格通常是比使用函数更好的解决方案,因为代码的可读性更好,而且您可以使用自己对WeekNumberFinancialQuarter等内容的定义,这些内容在不同国家甚至不同公司之间差别很大。

票数 3
EN

Stack Overflow用户

发布于 2019-05-31 18:35:27

我为此创建了一个标量函数:

代码语言:javascript
复制
create function [dbo].[lastDWMonth]
    (
     @y int
    ,@m int
    ,@dw int
    )

returns date

as

begin

declare @d date

;with x as
    (
    select datefromparts(@y,@m,1) d

    union all

    select dateadd(day,1,d) from x where d < eomonth(datefromparts(@y,@m,1))
    )

select
    @d = max(d)
from
    x
where
    datepart(dw,d) = @dw

return @d

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

https://stackoverflow.com/questions/13988633

复制
相关文章

相似问题

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