Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách lấy Ngày thứ Bảy (Hoặc bất kỳ Ngày nào khác trong tuần) - SQL Server

Đây là một hàm sẽ trả về vào thứ Bảy tới nếu bạn gọi nó như thế này:

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

"6" đến từ danh sách các giá trị có thể có bạn có thể đặt cho DATEFIRST .

Bạn có thể nhận được bất kỳ ngày nào khác trong tuần bằng cách thay đổi thông số thứ hai cho phù hợp.

Đây là chức năng:

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

[CHỈNH SỬA] Đây có thể là một giải pháp khác. Điều này sẽ hoạt động ở bất kỳ ngôn ngữ nào:

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 @[email protected]
    if @dx < 0 
    BEGIN
      SET @aDate = NULL 
      BREAK
    END
  END

  RETURN @aDate

END
GO


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để bỏ danh sách các bảng SQL Server, bỏ qua các ràng buộc?

  2. SQL Server FileStream cách điền cột dòng lọc

  3. Mô phỏng / Mô phỏng SQL Azure cục bộ?

  4. Giá trị SQL Server 2008 GEOGRAPHY STDistance ()

  5. Bảng đầy đủ chuyển vị SQL