表
| patientFirstName | patientMiddleName | patientLastName | startdate | enddate |
|-------------------------|---------------------------|------------------------|--------------|------------|
| Patient | Demo | Test | 2018-09-02 | 2018-09-08 |
| John | Doe | Demo | 2018-09-02 | 2018-09-14 |
| Admin | Admin | Admin | 2018-09-07 | 2018-09-20 |
当我运行以下查询时,我期望只有一条记录,即“患者演示测试”,而不是两条记录。我在哪里弄错了?
DECLARE @searchInput varchar(10)
DECLARE @startTime DATE
DECLARE @endTime DATE
SET @searchInput = 'o'
SET @startTime = '2018-09-02'
SET @endTime = '2018-09-12'
SELECT * FROM PatientDemoTable
WHERE (@startTime IS NULL OR startdate >= @startTime)
AND (@endTime IS NULL OR enddate <= @endTime)
AND patientFirstName like '%'+@searchInput+'%'
OR patientMiddleName like '%'+@searchInput+'%'
OR patientLastName like '%'+@searchInput+'%'
当我删除
AND patientFirstName like '%'+@searchInput+'%'
OR patientMiddleName like '%'+@searchInput+'%'
OR patientLastName like '%'+@searchInput+'%'
显示正确的记录,但没有文本过滤器。
答案 0 :(得分:3)
只需在适当的地方添加括号:
DECLARE @searchInput varchar(10)
DECLARE @startTime DATE
DECLARE @endTime DATE
SET @searchInput = 'o'
SET @startTime = '2018-09-02'
SET @endTime = '2018-09-12'
SELECT * FROM PatientDemoTable
WHERE (@startTime IS NULL OR startdate >= @startTime)
AND (@endTime IS NULL OR enddate <= @endTime)
AND (patientFirstName like '%'+@searchInput+'%'
OR patientMiddleName like '%'+@searchInput+'%'
OR patientLastName like '%'+@searchInput+'%')