我想在排除星期几的给定日期中获取日期差异。仅适用于星期几的T-SQL日期差异
以下是我有:
SELECT DATEADD (w, -4, GETDATE())
这将返回2013年5月4日19:01:53.170,这意味着它也算周末。
同为
SELECT DATEADD (dw, -4, GETDATE())
任何帮助将不胜感激。
在此先感谢。
我想在排除星期几的给定日期中获取日期差异。仅适用于星期几的T-SQL日期差异
以下是我有:
SELECT DATEADD (w, -4, GETDATE())
这将返回2013年5月4日19:01:53.170,这意味着它也算周末。
同为
SELECT DATEADD (dw, -4, GETDATE())
任何帮助将不胜感激。
在此先感谢。
我使用这些函数返回两个日期之间的非周末秒:
CREATE FUNCTION [dbo].[DateDiff_NoWeekends](
@date1 DATETIME,
@date2 DATETIME
)
RETURNS INT AS BEGIN
DECLARE @retValue INT
SET @date1 = dbo.__CorrectDate(@date1, 1)
SET @date2 = dbo.__CorrectDate(@date2, 0)
IF (@date1 >= @date2)
SET @retValue = 0
ELSE BEGIN
DECLARE @days INT, @weekday INT
SET @days = DATEDIFF(d, @date1, @date2)
SET @weekday = DATEPART(dw, @date1) - 1
SET @retValue = DATEDIFF(s, @date1, @date2) - 2 * 24 * 3600 * ((@days + @weekday)/7)
END
RETURN @retValue
END
GO
CREATE FUNCTION [dbo].[__CorrectDate](
@date DATETIME,
@forward INT
)
RETURNS DATETIME AS BEGIN
IF (DATEPART(dw, @date) > 5) BEGIN
IF (@forward = 1) BEGIN
SET @date = @date + (8 - DATEPART(dw, @date))
SET @date = DateAdd(Hour, (8 - DatePart(Hour, @date)), @date)
END ELSE BEGIN
SET @date = @date - (DATEPART(dw, @date)- 5)
SET @date = DateAdd(Hour, (18 - DatePart(Hour, @date)), @date)
END
SET @date = DateAdd(Minute, -DatePart(Minute, @date), @date)
SET @date = DateAdd(Second, -DatePart(Second, @date), @date)
END
RETURN @date
END
下面是所有非周末两天在sql-fiddle demo四月(22)。
SELECT [no weekend days in april] =
(dbo.DateDiff_NoWeekends('2013-04-01','2013-05-01')
/3600/24)
下面的查询给出了单独工作日之差,即计算两次天之间没有OD天,减去没有周末,
DECLARE @StartDate DATETIME,
@EndDate DATETIME
SELECT @StartDate = '01-July-2008',
@EndDate = '30-July-2008'
;WITH DATE (Date1)
AS (
SELECT DATEADD(DAY, DATEDIFF(DAY, '19000101', @StartDate), '19000101')
UNION ALL
SELECT DATEADD(DAY, 1, Date1)
FROM DATE
WHERE Date1 < @EndDate
)
SELECT count(*) -
(
SELECT count(*)
--CONVERT(VARCHAR(15),d1.DATE1 ,110) as [Working Date],
--DATENAME(weekday, d1.Date1) [Working Day]
from DATE d1 where (DATENAME(weekday, d1.Date1)) in ('Saturday','Sunday')
)
--CONVERT(VARCHAR(15),d1.DATE1 ,110) as [Working Date],
--DATENAME(weekday, d1.Date1) [Working Day]
from DATE d1 where (DATENAME(weekday, d1.Date1)) not in ('Saturday','Sunday')
请让我知道任何澄清
谢谢阿伦,尽管我在('星期六','星期天')“改变为”不在('星期六','星期天')“。非常感谢 – 2013-05-08 11:22:29
也许我仍然缺少一些完整的测试,但是这也为我的作品:走差异化的天,然后减去2天,每个周末
DateDiff(d, d1, d2) - 2*DateDiff(wk, d1, d2)
可以放在一个功能井
你需要什么? 'Dateadd'不返回日期差异。 – 2013-05-08 11:13:17
我的不好,Tsql很新。我需要获得今天的日期减去特定的数字,但不包括平日。 – 2013-05-08 11:17:31
获取日历表。 – 2013-05-08 11:18:23