我是高级SQL的新手,如果我输入的参数日期不是星期五,我需要在SQL Server中编写一个SVF来返回上周五的日期。
例如,今天是2015年7月1日星期三,此功能应在2015年6月26日星期五之前返回。假设今天是2015年7月3日星期五,那么该函数将返回2015年7月3日(无变化)。
如果您可以编辑以下代码,请求帮助:
CREATE FUNCTION fnDateCheck (@date datetime)
RETURNS @FridayDate date
AS
BEGIN
DECLARE @FridayDate
if
RETURN
else if
RETURN
END
GO
我找到了这篇参考文章,与我的要求非常相似,但它不是一个功能:Get last Friday's Date unless today is Friday using T-SQL
declare @date datetime;
set @date = '2012-08-10'
SELECT
CASE WHEN datepart(weekday, @date) > 5
THEN DATEADD(DAY, +4, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0))
ELSE DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0))
END
非常感谢!!
答案 0 :(得分:1)
CREATE FUNCTION fnDateCheck (@date datetime)
RETURNS datetime
AS
BEGIN
DECLARE @FridayDate DATETIME;
IF (DATEPART(WEEKDAY, @date ) <> 6)
BEGIN
SELECT @FridayDate = case when datepart(weekday, @date) >5 then
DATEADD(DAY, +4, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0))
else DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) end
END
ELSE
BEGIN
SET @FridayDate = @date
END
RETURN @FridayDate;
END
GO
答案 1 :(得分:0)
似乎这样的事情可能会帮助你重新格式化,显然这不是一个完整的功能,而是完成逻辑的部分。
SELECT case
when datepart(dw,getdate()) != 6 then DATEADD(wk,DATEDIFF(wk,7,GETDATE()),4)
else GETDATE()
end
答案 2 :(得分:0)
您找到的脚本运行正常。你只需要把它写成一个函数。
CREATE FUNCTION fnDateCheck
(
@date datetime
)
RETURNS DATETIME
AS
BEGIN
RETURN (SELECT CASE
WHEN DATEPART(WEEKDAY, @date) > 5 THEN
DATEADD(DAY, + 4, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0))
ELSE
DATEADD(DAY, - 3, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0))
END)
END
GO