Используйте предложение WHERE вместе с параметрами Between и NULL для 2 полей даты - PullRequest
0 голосов
/ 07 мая 2020

Работа с параметрами и SQL в отчете SSRS

@ FromDate и @ToDate могут иметь значение null - для получения всех 4 записей

@ Fromdate может иметь значение даты, а @ ToDate имеет значение null - в этом случае необходимо получить все значения даты, которые не имеют TravelTo Date

@ Fromdate и @todate имеют значения, тогда необходимо получить последние 2 записи

@ FromDate и @ToDate имеет значение null, тогда необходимо получить все значения

Я использовал приведенный ниже код для получения данных, но я не получаю нужные данные, любое предложение приветствуется.

Где (TravelTo BETWEEN @FROMSTART AND @TODATE)

или (@TODATE IS NULL и TravelFrom> =@FROMSTART)

OR (@FROMSTART IS NULL AND TravelFrom <=@TODATE) </p>

ИЛИ (@FROMSTART IS NULL И @TODATE IS NULL)

enter image description here

Снимок экрана Parmater из SSRS

enter image description here

Ответы [ 3 ]

0 голосов
/ 07 мая 2020
SELECT * 
FROM TABLE1
WHERE ((@FROMSTART IS NULL AND @TODATE IS NULL)
OR(@FROMSTART IS NULL AND TravelTo <=@TODATE)
OR(@TODATE IS NULL AND TravelFrom >=@FROMSTART)
OR(TravelFrom >= @FROMSTART AND TravelTo<=@TODATE))

Надеюсь, этот запрос отлично подойдет для вашего случая:

Вы забыли упомянуть эти условия в скобках открытия / закрытия, поэтому только вы не можете получить правильный результат.

0 голосов
/ 07 мая 2020

Я думаю, что проблема во втором условии.

@ Fromdate может иметь значение даты, а @ToDate - null - в этом случае необходимо получить все значения даты, которые не имеют TravelTo Date

Пожалуйста, попробуйте приведенный ниже код, который (я думаю) делает то, что вы указали в своем вопросе. Если это не сработает, предоставьте набор дат тестирования и ожидаемый результат для каждого теста, поскольку некоторые из них немного неоднозначны.

ПРИМЕЧАНИЕ: Я использовал стандартный формат даты для дат как они не пострадают от преобразования в используемый вами формат ММ / ДД / ГГГГ и обратно.

DECLARE @t TABLE (ID int, TravelFrom date, TravelTo date)

INSERT INTO @t VALUES 
(9759497, '2020-02-01', NULL),
(5226416, '2020-01-15', NULL),
(2731975, '2020-03-01', '2020-04-30'),
(2318260, '2020-01-01', '2020-02-28')


DECLARE @fromDate date = '2020-02-01'
DECLARE @toDate date = NULL


SELECT *  FROM @t
    WHERE 
    (TravelFrom >= @fromDate or @fromDate is null)
    AND
    (TravelTo <= @toDate or @toDate is null)
    AND
    (
        CASE WHEN @toDate IS NULL THEN 1 ELSE 0 END 
        =
        CASE WHEN TravelTo IS NULL THEN 1 ELSE 0 END
     )
0 голосов
/ 07 мая 2020

Предполагая, что входные данные даты или сами столбцы могут быть NULL, вы можете попробовать:

SELECT *
FROM yourTable
WHERE
    (@FROMSTART > TravelFrom OR @FROMSTART IS NULL OR TravelFrom IS NULL) AND
    (@TODATE < TravelTo OR @TODATE IS NULL OR TravelTo IS NULL);

Этот logi c будет дисконтировать либо начало, либо конец диапазона дат, если столбец имеет значение NULL, или вход имеет значение NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...