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

获取两个日期之间的工作日数(星期日,星期一,星期二)SQL

汪弘毅
2023-03-14
问题内容

因此,对于一个开始日期和结束日期,我想确定在这两个日期之间发生的一周中的特定天数。

那么多少个星期一,星期二等

我知道我可以在“开始日期”和“结束日期”之间循环并每天检查一次,但是可能相差很多天。我更喜欢不需要循环的东西。有任何想法吗?(必须在SQL Server2005+中受支持)


问题答案:

鉴于我 认为 您正在尝试获得的结果,应该这样做:

SET DATEFIRST 1

DECLARE
    @start_date DATETIME,
    @end_date DATETIME

SET @start_date = '2011-07-11'
SET @end_date = '2011-07-22'

;WITH Days_Of_The_Week AS (
    SELECT 1 AS day_number, 'Monday' AS day_name UNION ALL
    SELECT 2 AS day_number, 'Tuesday' AS day_name UNION ALL
    SELECT 3 AS day_number, 'Wednesday' AS day_name UNION ALL
    SELECT 4 AS day_number, 'Thursday' AS day_name UNION ALL
    SELECT 5 AS day_number, 'Friday' AS day_name UNION ALL
    SELECT 6 AS day_number, 'Saturday' AS day_name UNION ALL
    SELECT 7 AS day_number, 'Sunday' AS day_name
)
SELECT
    day_name,
    1 + DATEDIFF(wk, @start_date, @end_date) -
        CASE WHEN DATEPART(weekday, @start_date) > day_number THEN 1 ELSE 0 END -
        CASE WHEN DATEPART(weekday, @end_date)   < day_number THEN 1 ELSE 0 END
FROM
    Days_Of_The_Week


 类似资料:
  • 问题内容: 我在一个项目中工作,我在Date中有两种类型。我想计算这两个日期之间的周数。日期可以是不同的年份。有什么好的解决方案吗? 我试图通过Joda-time来实现这一点,这在其他主题中已得到建议。 我不熟悉该库,但我尝试执行以下操作: 但这是完全错误的…有什么建议吗? 问题答案: 乔达时间很简单:

  • 问题内容: 我有开始日期和结束日期。 我需要找出星期天或星期一等取决于用户单击复选框的日期。 如何在PHP中查找/计算? 问题答案: 您可以创建一个函数,该函数递归使用strtotime()来计算天数。由于工作正常。 希望这是您正在寻找的东西:)

  • 问题内容: 我需要输出从当前日期开始的未来12个月的日期列表(仅星期一和星期二),如下所示: 2010年1月 星期二2010年1月12日 星期一2010 年1月18日 星期二2010 年1月19日 星期一2010 年1月25 日星期一2010年 2月2日 星期二2010 年2月8日 星期一2010年2月9日星期二2010 年 2月 15 日星期一2010年2月15日 星期二2010 年2月16日

  • 问题内容: 我已经实现了一种获取当前星期中星期一的日期的方法,并且已经将星期一指定为星期的第一天。 但是,无论我做什么,它都会返回2013年3月24日格林尼治标准时间。我看不到这里的问题。有人能帮忙吗? 问题答案: 试试这个 :

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

  • 问题内容: 我目前有此代码: 这是Date对象的扩展。 我需要做同样的事情,但是让日历返回我从星期一开始而不是星期日的一周中的几天。 问题答案: 您只需要使用iso8601日历获取一周中的第一天,其中第一个工作日为星期一,并添加0至6天。尝试这样: