2016-07-28 14 views
0

SQLテーブルには、日付が入った列があります。私はそれぞれの日の最後の就業日を考えています。日付変数を使用して最終作業日を計算する

一部の日付は次のとおりです。私はこの

SELECT DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)) 

ではなく、のようなものを使用して考え

  • 2016年5月5日
  • 2016年7月1日
  • 2016年3月5日

何を変える必要があるか確かめてください。

+4

「昨営業日」とはどういう意味ですか? –

+0

私は個人的には、あなたが望むものを完全に理解していないので、実際のサンプルテーブルが(DBMSと一緒に)タグ付けされていれば役に立ちます。 MAX()を使うのと同じくらい簡単ですか? https://msdn.microsoft.com/en-us/library/ms187751.aspx – CodyMR

+0

月の最後の就業日。例:先月の最終営業日2016-06-30 – FraserMunro

答えて

0
declare @date datetime = '20160211' 



SELECT dateadd(day,-day(dateadd(month,1,@DATE)), dateadd(month,1,@DATE)) - 
     CASE WHEN 
      datediff(day,0,dateadd(day, 
            -day(dateadd(month,1,@DATE)), 
            dateadd(month,1,@DATE)) 
               ) % 7 = 5 
      THEN 
       1 
       ELSE 
       0 
      END - 
     CASE WHEN 
      datediff(day,0,dateadd(day, 
            -day(dateadd(month,1,@DATE)), 
            dateadd(month,1,@DATE)) 
            ) % 7 = 6 
      THEN 
       2 
       ELSE 
       0 
      END 
0

あなたが毎日作業している場合:、私のように、あなたの場合は月曜日から金曜日まで仕事

DECLARE @date datetime = GETDATE(); 

--Last day of month 
SELECT DATEADD(MONTH, DATEDIFF(MONTH,0,@date)+1,0)-1 

を:

--Last day from MON-FRI 
--1-SUN, 2-MON, ..., 7-SAT 
SELECT TOP 1 DATEADD(MONTH, DATEDIFF(MONTH,0,@date)+1,0)-N 
FROM (VALUES (1),(2),(3),(4),(5),(6),(7)) T(N) 
WHERE DATEPART(WEEKDAY, DATEADD(MONTH, DATEDIFF(MONTH,0,@date)+1,0)-N) IN (2,3,4,5,6)--From MON to FRI 
ORDER BY N; 

をあなたは単にあなたの就業日を変更することができます。

休日を含める場合は、その日付の追加テーブルが必要です。

0

これは、私のSQLから今月の最後の作業日を見つけるためのものです。私は私のストアドプロシージャにこれを持っていた。

declare @dt datetime, 
     @lastDate datetime, 
     @lastWeekDay datetime 
set @dt=getdate(); 
<-- if you want to find of specific month than in place of getdate() above write like '06/06/2016' --> 
set @lastDate = (SELECT DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @dt) + 1,0))); 
declare @dayOfWeek INT = (SELECT DATEDIFF(dd, 0, @lastDate) % 7); 
set @lastWeekDay = (SELECT CASE WHEN @dayOfWeek = 5 THEN DATEADD(dd, -1, @lastDate) 
          WHEN @dayOfWeek = 6 THEN DATEADD(dd, -2, @lastDate) 
          ELSE @lastDate END) 
SELECT @lastWeekDay;