Как написать функцию, которая дает самую последнюю дату независимо от количества дат, переданных в функцию в SQL server
узнать последнюю дату из дат п столбцов в SQL Server
Ex.
Greatest(date1,date2,date3,date4,date5)
Greatest(date1,date2,date3)
Как написать функцию, которая дает самую последнюю дату независимо от количества дат, переданных в функцию в SQL server
узнать последнюю дату из дат п столбцов в SQL Server
Ex.
Greatest(date1,date2,date3,date4,date5)
Greatest(date1,date2,date3)
Вот один из способов, используя Table valued constructor
SELECT *,
(SELECT Max(dates)
FROM (VALUES (date1),
(date2)) tc(dates)) as Max_date
FROM (SELECT '2015-01-01' AS date1,
'2016-01-01' AS date2) a
См это решение с образцами:
WITH Src AS
(
SELECT * FROM (VALUES
(GETDATE(), GETDATE()+1, GETDATE()-2),
(GETDATE()-3, GETDATE()+1, GETDATE()+4)
)T(Date1, Date2, Date3)
)
SELECT *
FROM Src
CROSS APPLY (SELECT MAX(D) FROM (VALUES (Date1), (Date2), (Date3)) T(D)) T(MaxDate)
Обрабатывать CROSS APPLY (SELECT MAX(D) FROM (VALUES (A), (B), ..., (Z)) T(D))
, как Greatest(A, B, ... Z)
.
Создайте функцию с параметрами по мере необходимости.
CREATE FUNCTION Greatest
(
@Param1 DATETIME,
@Param2 DATETIME,
@Param3 DATETIME,
@Param4 DATETIME,
@Param5 DATETIME,
@Param6 DATETIME,
@Param7 DATETIME,
@Param8 DATETIME,
@Param9 DATETIME
)
RETURNS DATETIME
AS
BEGIN
DECLARE @MaxDate DATETIME
SELECT @MaxDate = MAX(dates)
FROM
(
VALUES (@Param1),
(@Param2),
(@Param3),
(@Param4),
(@Param5),
(@Param6),
(@Param7),
(@Param8),
(@Param9)
) t(dates)
RETURN @MaxDate
END
GO
Использование.
SELECT dbo.Greatest('2016.01.01', '2015.01.02', DEFAULT, DEFAULT, DEFAULT,DEFAULT,DEFAULT,DEFAULT,DEFAULT) -- 2016-01-01
SELECT dbo.Greatest('2016.01.01', '2015.01.02', '2016.08.20', '2014.07.06', '2013.08.01','2012.01.01',DEFAULT,DEFAULT,DEFAULT) -- 2016-08-20
Можете вставить код, который вы пробовали? – owczarek
'выбрать макс (date_cl) из ( \t выберите date_0 date_cl профсоюзу все \t выберите дата_1 объединение всех \t .... \t выбрать date_n ) x' – Praveen
Я попытался с помощью массива таблицы. Это предполагает вставить значения в fuction. Но мне нужно вызвать эту функцию из разных процедур с разными значениями. –