SQL。 SP或函数应计算星期五的下一个日期

时间:2011-05-12 21:29:38

标签: sql sql-server-2005 sql-server-2008

我需要编写一个商店程序,它会在给定日期返回下一个星期五的日期吗?例如 - 如果日期是05/12/2011,那么它应该在下个星期五返回05/13/2011。如果您通过,05/16/2011,那么它应该返回日期为2011年5月20日(星期五)。如果您将星期五作为日期传递,那么它应该返回相同的日期。

3 个答案:

答案 0 :(得分:9)

我将它设为标量UDF,因为它更容易消耗输出。

CREATE FUNCTION dbo.GetNextFriday(
@D DATETIME
)
RETURNS DATETIME 
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT
AS
BEGIN
RETURN DATEADD(DAY,(13 - (@@DATEFIRST + DATEPART(WEEKDAY,@D)))%7,@D)
END

答案 1 :(得分:4)

这适用于SQL Server 2008.要在2005年使用,只需将日期字段更改为您的日期时间转换日期。它还假设您没有更改默认的周开始值。

DECLARE @PassedDate date = '5/21/2011';
SELECT DATEADD(DAY,(CASE DATEPART(DW,@PassedDate) WHEN 7 THEN 6 ELSE 6 - DATEPART(DW,@PassedDate) END),@PassedDate);

答案 2 :(得分:0)

这里有很好的解决方案,但我也建议查看时间表:您可以在Analysis服务器中轻松生成它们,并且可以将它们编入索引非常快,为您提供下周工作的简单方法(除其他外) )。

您可以找到有关他们的更多信息here

在我们的案例中,相同的解决方案是

Select MIN(PK_Date) from Time Where PK_Date > @SomeDate AND Day_Of_Week= 6

当然,当您为大型记录集执行此操作时,您还可以进行连接以获得最大速度和速度。效率