【发布时间】:2019-05-21 08:23:55
【问题描述】:
我想编写一个函数来返回 datediff 忽略 SQL Server 上的周末。 是否允许将间隔作为参数传递给我的用户定义函数,如下所示? SQL Server 说“为 datediff 指定的参数 1 无效。”
CREATE FUNCTION [dbo].[DATEDIFFWD](@interval varchar(2), @ini datetime, @end datetime)
RETURNS int
AS
BEGIN
DECLARE @output int
SET @output = DATEDIFF(@interval, @ini, @end)
IF (@interval = 'hh') SET @output = @output - (DATEDIFF(WK, @ini, @end) * 48)
IF (@interval = 'dd') SET @output = @output - (DATEDIFF(WK, @ini, @end) * 2)
RETURN @output
END
【问题讨论】:
-
你不能。但是由于您使用的是
if @interval = 'hh'...,您不妨添加if @interval = 'hh' @output = datediff(hour, ); @output = @output - ... -
旁白:
DateDiff返回以指定单位跨越的 边界 的数量,例如2018-01-01T00:30:00和2018-01-01T23:30:00之间的天数是0和2018-01-01T23:30:00和2018-01-02T00:30:00之间的天数是1。始终使用跨越的week边界的数量并乘以一个因子以得到更小的单位,例如hour,不寻常。走另一条路,例如以分钟为单位除以1200得到天数的差异消除了DateDiff对于day的边界交叉方面。
标签: sql-server tsql user-defined-functions