sql-server – 在功能中设置DATEFIRST
我想在我的函数中设置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,-(DAY(DATEADD(mm,1,@mydate))),DATEADD(mm,@mydate)))) > 5) SET @myDeduct = @myDeduct + 1 SET @my = day(DATEADD(dd,@mydate))) Set @TotalDays = (select (((@my/7) * 5 + (@my%7)) - @myDeduct)) Select @TotalDays 解决方法我通常的解决方法是使用“已知良好”的日期进行比较.比如说,我需要检查一个日期是星期六.我不是依赖于DATEFIRST或语言设置(用于使用DATENAME),而是说: DATEPART(weekday,DateToCheck) = DATEPART(weekday,'20120714') 我知道2012年7月14日是星期六,所以我在没有依赖任何外部设置的情况下执行了检查. 表达式(DATEPART(工作日,DateToCheck)@@ DATEFIRST)%7将始终生成星期六的值0,星期日的1,星期一的2等. 所以,我建议你创建一个表: CREATE TABLE WorkingDays ( NormalisedDay int not null,DaysInMonth int not null,WorkingDays int not null ) 填充此表是一次性练习. NormalisedDay将是由上面给出的表达式计算的值. 要计算给定特定日期的DaysInMonth,您可以使用以下表达式: DATEDIFF(day,DATEADD(month,DATEDIFF(month,DateToCheck),0),'20010101','20010201')) 现在您的所有功能都要查找表中的值. (当然,DaysInMonth为28的所有行都会有20个结果.只有29,30和31的行需要一些工作才能产生) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- SQLServer复制——发布与订阅的注意事项
- sql-server – 我可以在SQL Server中选择0列吗?
- SQL Server把某个字段的数据用一条语句转换成字符串
- SQLServer收缩数据库
- SQLServer 复杂存储过程并发优化
- sql-server – Visual Studio 2012中数据库资源管理器中的M
- sql – 当我想使用数据库约束但只标记为已删除而不是删除时
- mysql 5.7以上版本安装配置方法图文教程(mysql 5.7.12\
- sql-server-2008 – Sql Server 2008 Reporting Services:
- 如何在两个二进制类型之间的sql server中进行按位异或?