sql >> Database teknologi >  >> RDS >> Sqlserver

Få antal hverdage (søndage, mandage, tirsdage) mellem to datoer SQL

I betragtning af hvad jeg mener du prøver at få, burde dette gøre det:

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


  1. Beregn gennemsnit af kolonne fra MYSQL-forespørgsel

  2. Automatisk dataindsamling af databaseskemaændringer i MS SQL Server

  3. Hvad er forskellen mellem Scope_Identity(), Identity(), @@Identity og Ident_Current()?

  4. Forbindelsestimeout ved forespørgsel på stor tabel