在sql表中我有一個包含日期的列。我想確定每個日期的最後一個工作日。使用日期變量來計算上次工作日期
某些日期是;
- 2016年5月5日
- 2016年7月1日
- 2016年3月5日
我想用類似這樣
SELECT DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
,但不是的確定我需要改變。
在sql表中我有一個包含日期的列。我想確定每個日期的最後一個工作日。使用日期變量來計算上次工作日期
某些日期是;
我想用類似這樣
SELECT DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),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
如果你的日常工作:
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;
您可以簡單地改變你的工作日。
如果您想要包含假期,則需要使用該日期的附加表格。
這是從我的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;
「上一工作日」是什麼意思? –
我個人並不完全明白你想要什麼,所以帶有一些輸出的實際樣本表將會很有用(與你的DBMS一起 - 你應該標記)。這與使用MAX()一樣簡單嗎? https://msdn.microsoft.com/en-us/library/ms187751.aspx – CodyMR
本月的最後一個工作日。例如上個月的上個工作日2016-06-30 – FraserMunro