Узнать разницу в дате в SQL Server - PullRequest
0 голосов
/ 23 сентября 2011

У меня есть from date и to date в моей таблице, я хочу знать общее количество дней между двумя датами без воскресенье в SQL Server 2008.

дай мне запрос ..

Примите мой вопрос ...

Ответы [ 3 ]

2 голосов
/ 23 сентября 2011

ОК, поэтому определите общее количество дней, вычтите общее количество недель и коэффициент скрипки для случая, когда датой начала является воскресенье:

SELECT
   DATEDIFF(dd, FromDate, ToDate)
  -DATEDIFF(wk, FromDate, ToDate)
  -(CASE WHEN DATEPART(dw, FromDate) = 1 THEN 1 ELSE 0 END)
1 голос
/ 23 сентября 2011

Вы можете сделать это с помощью CTE, и это легко можно превратить в скалярную функцию:

DECLARE @startDate DATETIME = '2011-09-01'
DECLARE @endDate DATETIME = '2011-09-23'

;WITH DateRange (date) AS
(
    SELECT @startDate 
    UNION ALL
    SELECT Date+1
    FROM DateRange
    WHERE date<@endDate
)
SELECT COUNT(*) FROM DateRange WHERE DATENAME(dw,Date) != 'Sunday'

Возвращает 20, которое является количеством дней в этом месяце, которые не являются воскресеньями.

Вот эквивалентная функция, которую можно использовать:

CREATE FUNCTION dbo.NumberOfDaysExcludingSunday(
    @startDate DATETIME,
    @endDate DATETIME
) RETURNS INT AS
BEGIN
DECLARE @rtn INT
;WITH DateRange (date) AS
(
    SELECT @startDate 
    UNION ALL
    SELECT Date+1
    FROM DateRange
    WHERE date<@endDate
)
SELECT @rtn = COUNT(*) FROM DateRange WHERE DATENAME(dw,Date) != 'Sunday'
RETURN @rtn
END

Использование:

SELECT dbo.NumberOfDaysExcludingSunday(startDate,endDate)
FROM myTable
1 голос
/ 23 сентября 2011

попробуйте использовать это в качестве примера и работайте ..

DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
SET @StartDate = '2008/10/01'
SET @EndDate = '2008/10/31'


SELECT
   (DATEDIFF(dd, @StartDate, @EndDate) + 1)
  -(DATEDIFF(wk, @StartDate, @EndDate) * 2)
  -(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END)
  -(CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...