如何在T-SQL中获取该月的上个星期五的日期?
我将把年份和月份作为参数传递,例如,201211。如果我传递'201211‘作为参数,它应该返回'20121130’作为答案,因为它是‘12’11月的最后一个星期五的日期。
发布于 2012-12-21 19:17:43
1900年1月5日是一个星期五。它使用该基准日期并计算任何给定月份中的最后一个星期五,但是您必须为它提供一个该月内的日期,而不仅仅是该月本身。将其中的2012-12-01替换为您的月份中的日期
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来获取最后一个星期六,等等。
发布于 2012-12-21 23:09:24
使用calendar table会简单得多;在根据自己的需要创建适当的列之后,您只需编写以下代码:
select
max([Date])
from
dbo.Calendar
where
YearAndMonth = 201211 and
DayOfWeek = 'Friday'在确定日期时,日历表格通常是比使用函数更好的解决方案,因为代码的可读性更好,而且您可以使用自己对WeekNumber、FinancialQuarter等内容的定义,这些内容在不同国家甚至不同公司之间差别很大。
发布于 2019-05-31 18:35:27
我为此创建了一个标量函数:
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
endhttps://stackoverflow.com/questions/13988633
复制相似问题