Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 检查当前日期与当月最后三天_Sql Server_Oracle - Fatal编程技术网

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;