【发布时间】:2023-04-10 16:42:02
【问题描述】:
作为 SQL Server 搜索查询中 WHERE 子句的条件之一,我尝试使用 ISNULL 按 courseId 进行搜索。
当查询以除@currentUserId 之外的所有空值执行时,如下所示,查询不返回任何记录。
我的 SQL:
DECLARE @currentUserId int = '6'
DECLARE @searchString nvarchar(MAX) = NULL
DECLARE @courseId nchar(10) = NULL
DECLARE @dateFrom date = NULL
DECLARE @dateTo date = NULL
SELECT [questionId],[Question].[moduleId],[questionDate],[questionTopic]
FROM [dbo].[Question],[dbo].[Module],[dbo].[ModuleCourse]
WHERE [lecturerId] = @currentUserId AND
([dbo].[Question].[moduleId] = [dbo].[Module].[moduleId] AND
[dbo].[Module].[moduleId] = [dbo].[ModuleCourse].[moduleId]) AND
([dbo].[Question].[questionTopic] LIKE ISNULL('%' + @searchString + '%','%') OR
[dbo].[Question].[questionText] LIKE ISNULL('%' + @searchString + '%','%')) AND
[dbo].[ModuleCourse].[courseId] = ISNULL(@courseId,'%') AND
([dbo].[Question].[questionDate] >= ISNULL(@dateFrom,(SELECT MIN([questionDate])
FROM [dbo].[Question])) AND
[dbo].[Question].[questionDate] <= ISNULL(@dateTo,(SELECT(GETDATE()))))
当行
[dbo].[ModuleCourse].[courseId] = ISNULL(@courseId,'%') AND
被注释掉,结果按预期返回。 ([dbo].[ModuleCourse].[courseId] 是 PK;nchar(10))
似乎通配符 % 在这种情况下不起作用;我不知道为什么。 请帮忙...
【问题讨论】:
标签: sql-server