【发布时间】:2012-09-11 10:46:08
【问题描述】:
我想在我的函数中设置 DATEFIRST,但这是不允许的。
SET DATEFIRST 1
我可以在 SP 中添加代码并从函数中调用 SP,但我并不热衷于这样做。
我可以在调用函数之前设置 DATEFIRST,但我也不热衷于这样做。
还有其他解决方法吗?
编辑
下面是我想在我的 FUNCTION 中使用的代码,用于返回当月的总工作日。但由于我的 DATEFIRST,我无法将此代码添加到 FUNCTION 中
DECLARE @my int
DECLARE @myDeduct int
DECLARE @day INT
DECLARE @mydate DATETIME
DECLARE @TotalDays INT
SET @mydate = GETDATE()
SET @myDeduct = 0
IF (@@DATEFIRST + DATEPART(DW, @mydate)) % 7 not in (0,1)
SET DateFirst 1 -- Set it monday=1 (value)
--Saturday and Sunday on the first and last day of a month will Deduct 1
IF (DATEPART(weekday,(DATEADD(dd,-(DAY(@mydate)-1),@mydate))) > 5)
SET @myDeduct = @myDeduct + 1
IF (DATEPART(weekday,(DATEADD(dd,-(DAY(DATEADD(mm,1,@mydate))),DATEADD(mm,1,@mydate)))) > 5)
SET @myDeduct = @myDeduct + 1
SET @my = day(DATEADD(dd,-(DAY(DATEADD(mm,1,@mydate))),DATEADD(mm,1,@mydate)))
Set @TotalDays = (select (((@my/7) * 5 + (@my%7)) - @myDeduct))
Select @TotalDays
【问题讨论】:
-
也许你可以重新设计你的函数中的逻辑,这样你就不会依赖
set datefirst? -
请看上面,我添加了我的代码来解释我想如何使用它。
标签: sql-server tsql date