Проблема при использовании необязательного параметра MS SQL

Требуется выводить список товаров, которые были проданы в определенный промежуток времени (SaleDate использует тип данных datetime), но второй даты может не быть, в таком случае требуется вывести список товаров только за тот день, который был указан в параметрах. В моем случае, если введен один параметр, то sql-запрос ничего не возвращает, но если указать два параметра, то все возвращается успешно. Я не совсем понимаю, почему это происходит. Код:

@FirstDate date,
@SecondDate date = NULL
as
if (@SecondDate IS NULL)
select Product.Title, Manufacturer.[Name], ProductSale.SaleDate, (Product.Price * ProductSale.Quantity) AS 'Total Earn' from
ProductSale join Product on Product.ID = ProductSale.ProductID join Manufacturer on Manufacturer.ID = Product.ManufacturerID
where SaleDate = @FirstDate
else if (select count(*) from ProductSale where SaleDate between @FirstDate and @SecondDate) != 0
select Product.Title, Manufacturer.[Name], ProductSale.SaleDate, (Product.Price * ProductSale.Quantity) AS 'Total Earn' from
ProductSale join Product on Product.ID = ProductSale.ProductID join Manufacturer on Manufacturer.ID = Product.ManufacturerID
where SaleDate between @FirstDate and @SecondDate
else if (select count(*) from ProductSale where SaleDate between @FirstDate and @SecondDate) = 0
print 'Товаров не найдено!' 

exec PR_2DATES '16.03.2024'



| Title | Name | SaleDate | TotalEarn |




Ответы (1 шт):

Автор решения: rotabor

Тут проблема в том, что "between @FirstDate and @SecondDate" - это, условно, 0, если @FirstDate и @SecondDate одно и то же. Поэтому нужно добавить одни сутки:

COALESCE(@SecondDate, DATEADD(day,1,@FirstDate))
→ Ссылка