I have a query for the last 10 days. I also have a variable declared. If the variable is empty string I want to query the last 10 days (works fine). If the variable string is not empty I want to search all rows not just the last 10 days.
I cannot put an if condition around the WHERE
clause. I was thinking have GETDATE()
as a variable and if the string is not empty it would be the oldest date in SQL but not sure how to get that date.
x
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 + '%';
Advertisement
Answer
Use boolean logic:
WHERE
(
@searchString = ''
AND event_filter.createdOn >= DATEADD(day, -10, GETDATE())
)
OR (
@searchString <> ''
AND event_filter.filterFileName LIKE '%' + @searchString + '%'
)
This assumes that by “empty”, you equal to the empty string – which is consistent with your current query, which you said works when the parameter is empty. If you mean null
, then:
WHERE
(
@searchString IS NULL
AND event_filter.createdOn >= DATEADD(day, -10, GETDATE())
)
OR (
@searchString IS NOT NULL
AND event_filter.filterFileName LIKE '%' + @searchString + '%'
)