【发布时间】:2014-09-11 12:02:03
【问题描述】:
开始周是星期六,结束周是星期五,我想写一个函数来返回日期的结束周。
e.g.
'2014-6-26' (Thursday) would return '2014-6-27' (Friday)
'2014-6-27' (Friday) would return '2014-6-27' (same day)
'2014-6-28' (Sat) would return '2014-7-04' (next Friday)
因为我不能在函数中设置 DATEFIRST,所以我很难创建这个函数。
这是我到目前为止所得到的。它适用于所有情况,除了当我进入星期六时,它会返回上一个星期五(这是错误的)。例如“2014-6-28”返回“2014-6-27”
CREATE FUNCTION [GetEndWeek](
@Date DATETIME
)
RETURNS DATETIME
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT
AS
BEGIN
RETURN DATEADD(DAY,(13 - (@@DATEFIRST + DATEPART(WEEKDAY, @Date )))%7,@Date )
END
任何帮助表示赞赏。
我不想在其他任何地方(即在 procs 中)设置 DATEFIRST,因为我经常调用此函数。
谢谢!
【问题讨论】:
标签: sql sql-server-2008 sql-function dateadd