【发布时间】:2017-09-01 23:17:32
【问题描述】:
好的,首先我看到了this thread。但没有一个解决方案非常令人满意。指定的答案看起来像 NULL 会破坏它,而评分最高的答案看起来很难维护。 所以我想知道类似以下的事情:
CREATE FUNCTION GetMaxDates
(
@dte1 datetime,
@dte2 datetime,
@dte3 datetime,
@dte4 datetime,
@dte5 datetime
)
RETURNS datetime
AS
BEGIN
RETURN (SELECT Max(TheDate)
FROM
(
SELECT @dte1 AS TheDate
UNION ALL
SELECT @dte2 AS TheDate
UNION ALL
SELECT @dte3 AS TheDate
UNION ALL
SELECT @dte4 AS TheDate
UNION ALL
SELECT @dte5 AS TheDate) AS Dates
)
END
GO
我看到的主要问题是,如果只有 3 个要比较的字段,您仍然必须为其他 2 个指定 NULL,如果您想将其扩展到 6 个比较,它将破坏现有的使用。如果它是一个参数化的存储过程,您可以为每个参数指定一个默认值,并且添加新参数不会破坏现有的引用。同样的方法显然也可以扩展到其他数据类型或诸如 Min 或 Avg 之类的东西。这有一些我没有发现的主要缺点吗?请注意,无论传递给它的部分、全部或全部值是空值还是重复值,此函数都有效。
【问题讨论】:
-
2.5 年后突然出现无法解释的否决票?
标签: sql sql-server tsql