如何获取周六的日期。我今天有约会。
GETDATE()
这该怎么做。
例如。今天是08-08-2011
08-08-2011
我想输出为 08-13-2011
08-13-2011
如果您这样调用该函数,它将在下一个星期六返回:
SELECT dbo.fn_Get_NextWeekDay('2011-08-08', 6)
“ 6”来自您可以设置的可能值的列表DATEFIRST。
DATEFIRST
您可以通过相应地更改第二个参数来获取星期几。
这是功能:
IF OBJECT_ID('dbo.fn_Get_NextWeekDay') IS NOT NULL DROP FUNCTION dbo.fn_Get_NextWeekDay GO CREATE FUNCTION dbo.fn_Get_NextWeekDay( @aDate DATETIME , @dayofweek INT /* @dw - day of the week 1 - Monday 2 - Tuesday 3 - Wednesday 4 - Thursday 5 - Friday 6 - Saturday 7 - Sunday */ ) RETURNS DATETIME AS /* SELECT dbo.fn_Get_NextWeekDay('2011-08-08', 6) SELECT dbo.fn_Get_NextWeekDay('2011-08-08', 1) */ BEGIN RETURN DATEADD(day , ( @dayofweek + 8 - DATEPART(dw, @aDate) - @@DATEFIRST ) % 7 , @aDate ) END GO
[编辑] 这可能是另一种解决方案。这应该以任何语言工作:
IF OBJECT_ID('dbo.fn_NextWeekDay') IS NOT NULL DROP FUNCTION dbo.fn_NextWeekDay GO CREATE FUNCTION dbo.fn_NextWeekDay( @aDate DATE , @dayofweek NVARCHAR(30) ) RETURNS DATE AS /* SELECT dbo.fn_NextWeekDay('2016-12-14', 'fri') SELECT dbo.fn_NextWeekDay('2016-03-15', 'mon') */ BEGIN DECLARE @dx INT = 6 WHILE UPPER(DATENAME(weekday,@aDate)) NOT LIKE UPPER(@dayofweek) + '%' BEGIN SET @aDate = DATEADD(day,1,@aDate) SET @dx=@dx-1 if @dx < 0 BEGIN SET @aDate = NULL BREAK END END RETURN @aDate END GO