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

除非今天是星期五,否则使用T-SQL获取上星期五的日期

史俊德
2023-03-14
问题内容

我正在尝试获取正确的SQL代码以获取上周五的日期。几天前,我认为自己的代码正确无误。但只是注意到,它是在上周的星期五日期,而不是最后一个星期五。我写此问题的日期是2012年8月11日,星期六,上午12:23。在SQLServer中,此代码将返回2012年8月3日,星期五。不过,我希望这能返回2012年8月10日,星期五。我该如何解决此代码?由于我们在这里进行了详细说明,因此,如果当前日期是星期五,那么我想返回今天的日期。因此,如果是昨天(2012年8月10日),并且我昨天运行了这段代码,那么我希望这段代码返回2012年8月10日,而不是2012年3月3日。

SELECT DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0))

问题答案:

试试这个:

declare @date datetime;
set @date='2012-08-09'
SELECT case when datepart(weekday, @date) >5 then
 DATEADD(DAY, +4, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) 
else DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) end

结果

2012-08-03

范例2:

declare @date datetime;
set @date='2012-08-10'
SELECT case when datepart(weekday, @date) >5 then
 DATEADD(DAY, +4, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) 
else DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) end

结果

  2012-08-10


 类似资料:
  • 问题内容: 我正在尝试获取SQL Server 2008中的最新星期五。 我有这个。它获取一周的开始时间(星期一),然后减去3天即可得出星期五。 在一周中运行此命令时,它将获得上周五的正确日期。但是,在星期五(或星期六)运行时,它仍然是上周的日期,而不是当前星期的星期五。我将使用if / else条件,但是我敢肯定有一种更简单的方法。 问题答案: 这适用于以下任何输入和任何设置: 通过将工作日值调

  • 问题内容: 如何获得当前一周的星期一和星期五的日期? 我有以下代码,但是如果当前日期是星期日或星期六,则它将失败。 问题答案: 这些strtotime输入效果很好: 您需要做的就是将逻辑包装在一些if语句中。

  • 问题内容: 我最近遇到了一项任务,必须在日期范围内获得所有星期五。我写了一小段代码,很惊讶地看到一些奇怪的行为。 下面是我的代码: 现在,当我运行代码时,我注意到缺少2011年的星期五。经过一些调试和在线浏览后,我发现这是特定于区域设置的,我必须使用它来修复它。 因此,在上面的代码中未注释相关行。 据我了解,一年的第一周应该从一年的整个星期开始。 例如,2010年1月1日是星期五。但它不会显示在结

  • 问题内容: 因此,对于一个开始日期和结束日期,我想确定在这两个日期之间发生的一周中的特定天数。 那么多少个星期一,星期二等 我知道我可以在“开始日期”和“结束日期”之间循环并每天检查一次,但是可能相差很多天。我更喜欢不需要循环的东西。有任何想法吗?(必须在SQL Server2005+中受支持) 问题答案: 鉴于我 认为 您正在尝试获得的结果,应该这样做:

  • 问题内容: 寻找一种获取日期格式为“11/1/2009”的日期的方法,这将是下个月的第一个星期日。我想在10月的第一个星期日之后运行此查询,以获取下个月的第一个星期日。用T-SQL查询完成此操作的最佳方法是什么? 谢谢 问题答案: 试试这个: 编辑说明: 下个月的第一个月由以下表达式给出: 或方式:将1更改为2,可以将其修改为从现在起两个月的第一个月: 编辑:作为对@NissanFan和@Anth

  • 问题内容: 我正在一个项目中,要求将日期计算为给定月份的最后一个星期五。我认为我有一个仅使用标准Java的解决方案,但我想知道是否有人知道更简洁或更有效的方法。以下是我今年测试的内容: 问题答案: 根据marked23的建议: