获取两个日期之间的工作日数(星期日,星期一,星期二)SQL [英] Get number of weekdays (Sundays, Mondays, Tuesdays) between two dates SQL

查看:1021
本文介绍了获取两个日期之间的工作日数(星期日,星期一,星期二)SQL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,我想在开始日期和结束日期确定这两个日期之间的星期几。

So, I'd like to, for a Start Date and End Date, determine how many particular days of the week occur between these two dates.

那么如何许多星期一,星期二等

So how many mondays, tuesdays, etc

我知道我可以通过开始和结束日期之间的循环来做,并检查每一天,但差异可能是一个很大的数字的日子。我喜欢不需要循环的东西。有任何想法吗? (必须在SQL Server 2005 +中支持)

I know I can do this with a loop between the Start and End Date and check each day, but the difference could possibly be a great number of days. I'd prefer something that didn't require a loop. Any ideas? (Must be supported in SQL Server 2005+)

推荐答案

鉴于我认为要做到这一点:

Given what I think you're trying to get, this should do it:

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

这篇关于获取两个日期之间的工作日数(星期日,星期一,星期二)SQL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆