Sql server 检查当前日期与当月最后三天
我想检查当前日期是否等于一个月的最后三天,不包括周六和周日 我可以得到一个月的最后一天Sql server 检查当前日期与当月最后三天,sql-server,oracle,Sql Server,Oracle,我想检查当前日期是否等于一个月的最后三天,不包括周六和周日 我可以得到一个月的最后一天 SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)) 我不知道如何检查每月最后三天(不包括周六和周日)的getdate() 这将大有帮助。。 谢谢 如果你真正的意思是你想要一个月的最后三个非周末,那么: SET DATEFIRST 7; DECLARE @today SMALLDATETIME, @nextmonth SMAL
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
我不知道如何检查每月最后三天(不包括周六和周日)的getdate()
这将大有帮助。。
谢谢
如果你真正的意思是你想要一个月的最后三个非周末,那么:
SET DATEFIRST 7;
DECLARE
@today SMALLDATETIME,
@nextmonth SMALLDATETIME;
SELECT
@today = DATEDIFF(DAY, 0, GETDATE()),
@nextmonth = DATEADD(MONTH, 1, @today-DAY(@today)+1);
;WITH x AS
(
-- get the 5 days prior to the first day of next month:
SELECT TOP (5) d = DATEADD(DAY, -ROW_NUMBER() OVER
(ORDER BY [object_id]), @nextmonth) FROM sys.all_objects
),
y AS
(
-- get the last three days that aren't on Sat/Sun:
SELECT TOP (3) d FROM x
WHERE DATEPART(WEEKDAY, d) NOT IN (1,7)
ORDER BY d DESC
)
-- now find out if today is in those three days:
-- (by definition, today can't be Sat/Sun)
SELECT 'Bazinga!' FROM y WHERE d = @today;
如果今天不在这三天内,这将不会产生任何结果。这也会给出一个月的最后三天,不包括周六和周日 选择LastFriDay、LastFriDay-1 LastFriDay、LastFriDay-2 LastFriDay 从( 选择DATEADD(mm,1,GETDATE()-DAY(GETDATE())+1)-1作为LastFriDay 联合所有 选择DATEADD(mm,1,GETDATE()-DAY(GETDATE())+1)-2作为LastFriDay 联合所有 选择DATEADD(mm,1,GETDATE()-DAY(GETDATE())+1)-3作为LastFriDay 联合所有 选择DATEADD(mm,1,GETDATE()-DAY(GETDATE())+1)-4作为LastFriDay 联合所有 选择DATEADD(mm,1,GETDATE()-DAY(GETDATE())+1)-5作为LastFriDay 联合所有 选择DATEADD(mm,1,GETDATE()-DAY(GETDATE())+1)-6作为LastFriDay 联合所有 选择DATEADD(mm,1,GETDATE()-DAY(GETDATE())+1)-7作为LastFriDay )就像你周五的桌子一样
其中DATENAME(WeekDay,LastFriDay)=“Friday”不是一个月的最后一天。这是一个月的最后一整秒钟,如果将它赋给smalldatetime变量,它将向上取整,如果将它与datetime2进行比较,它可能会丢失数据。为什么这个标签是甲骨文?你能明确确认你所说的“不包括周六和周日”是什么意思吗?你的意思是如果一个月的最后一天是周六,你真的想包括周三/周四/周五而不是周四/周五/周六吗?
SET DATEFIRST 7;
DECLARE
@today SMALLDATETIME,
@nextmonth SMALLDATETIME;
SELECT
@today = DATEDIFF(DAY, 0, GETDATE()),
@nextmonth = DATEADD(MONTH, 1, @today-DAY(@today)+1);
;WITH x AS
(
-- get the 5 days prior to the first day of next month:
SELECT TOP (5) d = DATEADD(DAY, -ROW_NUMBER() OVER
(ORDER BY [object_id]), @nextmonth) FROM sys.all_objects
),
y AS
(
-- get the last three days that aren't on Sat/Sun:
SELECT TOP (3) d FROM x
WHERE DATEPART(WEEKDAY, d) NOT IN (1,7)
ORDER BY d DESC
)
-- now find out if today is in those three days:
-- (by definition, today can't be Sat/Sun)
SELECT 'Bazinga!' FROM y WHERE d = @today;