sql >> データベース >  >> RDS >> Sqlserver

土曜日の日付 (または他の平日の日付) を取得する方法 - SQL Server

    これは、次のように呼び出すと次の土曜日を返す関数です:

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

    「6」は、可能な値のリスト に由来します。 DATEFIRST に設定できます .

    2 番目のパラメーターを適切に変更することで、他の曜日を取得できます。

    これが関数です:

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

    1. PostgreSQL count(*)が常に遅い場合、複雑なクエリをページ付けする方法は?

    2. SQLステートメントまたはストアドプロシージャから外部データベースに接続するにはどうすればよいですか?

    3. PLS-00201識別子'PACKAGENAME.PROCEDURENAME'を宣言する必要があります

    4. Mysql:DBを現地時間からUTCに変換