SQL если параметр - пустая строка, запросить всю БД, иначе запрос только за последние 10 дней - PullRequest
0 голосов
/ 06 августа 2020

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

Я не могу поставить условие if вокруг предложения WHERE. Я думал иметь GETDATE() в качестве переменной, и если строка не пуста, это будет самая старая дата в SQL, но не знаю, как получить эту дату.

DECLARE @searchString VARCHAR(50) = '';

SELECT
    [filterFileName], 
    event_filter.tradingDate, 
    log_folder.logFolderID, 
    isVMonDagLocked, 
    de_file.importStatus as de_importStatus,
    de_file.isValid as de_isValid,    
FROM [TradingCenter].[Trade].[TradingEventFilterFile] as event_filter
LEFT JOIN [TradingCenter].[Trade].[TradingEventFilterFile2LogFolder] as log_folder /*Get relation rows for filterfile*/
    ON event_filter.filterFileID = log_folder.filterFileID
LEFT JOIN [TradingCenter].[Trade].[TradingEventLogFolder] as trade_event_log_folder /**/
    ON log_folder.logFolderID = trade_event_log_folder.logFolderID
LEFT JOIN [TradeLog].[Trade].[DEFile] as de_file /*join DE file*/
    ON trade_event_log_folder.logFolderID = de_file.logFolderID
WHERE event_filter.createdOn >= DATEADD(day, -10, GETDATE())
    AND event_filter.filterFileName LIKE '%' + @searchString + '%';

1 Ответ

0 голосов
/ 06 августа 2020

Использовать логическое логическое значение c:

WHERE 
    (
        @searchString = ''
        AND event_filter.createdOn >= DATEADD(day, -10, GETDATE())
    )
    OR (
        @searchString <> ''
        AND event_filter.filterFileName LIKE '%' + @searchString + '%'
    )

Предполагается, что при "пустом" вы равняетесь пустой строке - что согласуется с вашим текущим запросом, который вы сказал работает, когда параметр пуст. Если вы имеете в виду null, то:

WHERE 
    (
        @searchString IS NULL
        AND event_filter.createdOn >= DATEADD(day, -10, GETDATE())
    )
    OR (
        @searchString IS NOT NULL
        AND event_filter.filterFileName LIKE '%' + @searchString + '%'
    )
...