Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak uzyskać datę sobotnią (lub dowolną inną datę w dni powszednie) - SQL Server

Jest to funkcja, która zwróci następną sobotę, jeśli nazwiesz to w ten sposób:

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

„6” pochodzi z listy możliwych wartości możesz ustawić dla DATEFIRST .

Możesz uzyskać dowolny inny dzień tygodnia, odpowiednio zmieniając drugi parametr.

Oto funkcja:

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

[EDYTUJ] To może być inne rozwiązanie. To powinno działać w dowolnym języku:

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. Jak pobrać plik przechowywany w bazie danych SQL w formacie binarnym?

  2. Po co wstawiać blok instrukcji TSQL, gdy poziom izolacji transakcji dla innej transakcji można serializować z filtrem nie powodującym konfliktów?

  3. Hibernacja:W SQL Server 2008 kolumna została zmieniona z datetime na datetime2. Jak mogę zaktualizować konfigurację hibernacji, aby to odzwierciedlić?

  4. eksport z serwera sql do pliku Excel za pomocą asp.net i vb.net?

  5. SQL Server 2008 - dzielenie kolumny wielowartościowej na wiersze z unikalnymi wartościami