如何获取周六的日期。我今天有约会。

GETDATE()

这该怎么做。

例如。今天是08-08-2011
我想输出为08-13-2011

最佳答案

如果您这样调用该函数,它将在下一个星期六返回:

SELECT dbo.fn_Get_NextWeekDay('2011-08-08', 6)

“6”来自the list of possible values,您可以将其设置为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

关于sql - 如何获取星期六的日期(或任何其他工作日的日期)-SQL Server,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6982061/

10-13 06:22