SQL SERVER 2016: функция рефакторинга для выполнения с параметром по умолчанию - PullRequest
0 голосов
/ 21 января 2020

У меня есть функция default_report для получения отчета за последние 24 месяца

CREATE FUNCTION dbo.default_report
RETURNS TABLE
AS
RETURN
(
    SELECT ID,sender,recipient,amount,currency
    FROM reports
    where submit_date >= dateadd(month,datediff(month,0,getdate())-24,0)
)

У меня есть функция custom_report для получения отчета за определенные c даты

CREATE FUNCTION dbo.custom_report(@start_date DATE,@end_date DATE)
RETURNS TABLE
AS
RETURN
(
    SELECT ID,sender,recipient,amount,currency
    FROM reports
    where submit_date BETWEEN @start_date AND @end_date
)

Единственная переменная в вышеупомянутых двух функциях - это предложение where, есть ли способ объединить две вышеупомянутые функции в одну и заставить их работать?

1 Ответ

1 голос
/ 21 января 2020

Ну, вы можете сделать:

CREATE FUNCTION dbo.custom_report (
    @start_date DATE = NULL,
    @end_date DATE = NULL
) RETURNS TABLE
AS
RETURN (SELECT ID, sender, recipient, amount, currency
        FROM reports
        WHERE submit_date >= COALESCE(@start_date, dateadd(month, -24, datefromparts(year(getdate()), month(getdate()), 1))) AND
              submit_date <= COALESCE(@end_date, getdate())
       );

Я предполагаю, что у вас нет дат в будущем, поэтому условие на @end_date получает все после условия @start_date.

I Также изменился расчет даты 24 месяца go, чтобы он был более понятным.

...