当前位置: 首页 > 面试题库 >

如何使用sql server获取一周中的上一个工作日与当前工作日的工作日

燕成双
2023-03-14
问题内容

我有一个在工作日(周一至周五)运行的sis软件包。如果我在星期二(background(DB))收到文件,则它需要前一个工作日的日期并进行一些交易。如果我在星期五运行工作,则必须获取星期一日期并处理交易。

我已使用以下查询获取之前的营业日期

Select Convert(varchar(50), Position_ID) as Position_ID,
       TransAmount_Base,
       Insert_Date as InsertDate
  from tblsample
 Where AsOfdate = Dateadd(dd, -1, Convert(datetime, Convert(varchar(10), '03/28/2012', 101), 120))
Order By Position_ID

如果我执行此查询,我将获得昨天的Transactios的结果。如果我在星期一运行相同的查询,则必须获取星期五的交易而不是星期日。


问题答案:
SELECT  DATEADD(DAY, CASE DATENAME(WEEKDAY, GETDATE()) 
                        WHEN 'Sunday' THEN -2 
                        WHEN 'Monday' THEN -3 
                        ELSE -1 END, DATEDIFF(DAY, 0, GETDATE()))

我更喜欢将其DATENAME用于类似这样的事情,DATEPART因为它消除了对设置的需要,DATEFIRST并确保本地计算机上时间/日期设置的变化不会影响结果。最后DATEDIFF(DAY, 0, GETDATE())将消除时间部分,GETDATE()消除了需要转换为varchar的过程(速度要慢得多)。

编辑(将近2年)

这个答案很早就在我的职业生涯中,每次都被投票否决让我很烦,因为我不再同意使用DATENAME的想法。

更为有效的解决方案是:

SELECT  DATEADD(DAY, CASE (DATEPART(WEEKDAY, GETDATE()) + @@DATEFIRST) % 7 
                        WHEN 1 THEN -2 
                        WHEN 2 THEN -3 
                        ELSE -1 
                    END, DATEDIFF(DAY, 0, GETDATE()));

这将适用于所有语言和DATEFIRST设置。



 类似资料:
  • 我正在尝试在我的小树枝视图中使用for循环来获取一周中的所有日子。 以下是我想做的事情: 这就是我迄今为止所尝试的: 但我得到了这个错误信息: 在呈现模板期间引发了异常(“DateTime::_construct():无法分析位置0处的时间字符串(“0天”)(“):意外字符”) 你知道我该怎么做吗?

  • 我想把一周中的几天放到屏幕上的周历里。基本上是获取一周中的天数并将其放入文本视图中,例如,今天是25号,然后取这个“25”并将其放入文本视图中,如此类推,但我没有成功。我试着这样: [在此输入图片描述][1] 当我运行应用程序时,它看起来像这样,有人能帮我吗?[1]: https://i.stack.imgur.com/jw89K.jpg

  • 问题内容: 我是使用java.calendar.api的新手。我想使用java指向给定日期的上一个工作日。但是,当我使用calendar.api操纵日期时,情况继续增加,因为我不得不考虑通常的周末和指向前一个月的指向,而且我还不得不考虑我所在地区的区域性假期…… 例如:我必须考虑美国的假期,并指出之前的一天。 我有什么方法可以 定义自己的日历 并使用它,以便日期操作可以感知所有那些通常的更改? 问

  • 我有以下类: 枚举日: 我不确定该如何回头看。请注意假期的列表不仅仅是周六和周日。它们是乡村节日,如中国的新年等。 我正在使用Java8,因此任何重构或改进都是受欢迎的:)

  • 问题内容: 如何获得当月的第一个工作日?如果不创建函数,则仅选择。像这样的东西: 有人知道吗? 谢谢。 问题答案: 一个简单的案例陈述就可以做到

  • 问题内容: 我要两个约会。1)当前日期为MM / dd / yy格式2)修改日期为当前日期后五个工作日(星期一至星期五),并且应为MMM dd,yyyy格式。 因此,如果我的当前时间是6月9日,那么currentDate应该是2014年6月9日,而ModifyDate应该是2014年6月13日。 这该怎么做? 问题答案: 这将增加工作日(周一至周五),并以所需格式显示日期。 2020年7月6日更新