SQL基于记录进行搜索

时间:2018-02-01 19:57:10

标签: sql-server

我有记录,我想根据某些条件过滤它们。当我添加第一个条件然后它可以工作,但是当我添加多个条件时,我没有得到预期的结果:

数据:

ScheduleID  ScheduledStartDateTime  Query
7857        2017-05-27 16:00:00.000 WHILE (1=1) BEGIN UPDATE TOP (3000) MainItemPOS SET Deleted = 1 WHERE MainItemID  = 276044 AND ConceptID  = 2120 AND 1 = Case  WHEN Deleted <> 1 THEN 1 ELSE 0 END IF @@RowCount=0 BREAK; END 
7856        2017-05-27 11:00:00.000 WHILE (1=1) BEGIN UPDATE TOP (3000) MainItemPOS SET Deleted = 0 WHERE MainItemID  = 276045 AND ConceptID  = 2120 AND 1 = Case  WHEN Deleted <> 0 THEN 1 ELSE 0 END IF @@RowCount=0 BREAK; END 

查询:这给了我这两行很好。

SELECT *
FROM ScheduledBulkUpdate(nolock) SBU
INNER JOIN ScheduledBulkUpdateRecurring(nolock) SBR ON SBR.BatchId = SBU.BatchId
WHERE 
SBU.Query LIKE('% ConceptID  = 2120 %')

现在我只想用MainItemID = 276044进行记录,所以我使用这个查询然后我没有得到理想的结果。如果我使用OR那么我也不会得到理想的结果。

SELECT *
FROM ScheduledBulkUpdate(nolock) SBU
INNER JOIN ScheduledBulkUpdateRecurring(nolock) SBR ON SBR.BatchId = SBU.BatchId
WHERE 
SBU.Query LIKE('% ConceptID  = 2120 %')
AND SBU.Query LIKE('% MainItemID  = 276044 %')

我需要使用子查询吗?如果我在第一次查询中将我的条件更改为MainItemID = 276044 AND ConceptID = 2120,那么它会起作用,但我对这种方法感到好奇。

1 个答案:

答案 0 :(得分:0)

每当EQUALS或LIKE运算符未返回预期结果且操作的任何一侧都有空格时,我都会产生怀疑。空白区域可能看起来像屏幕上的空白字符,但它可以由您的软件压缩,可以是TAB字符,也可能包含不可见的字符。

使用Wild卡消除空白区域,或使用十六进制编辑器查看空白区域实际包含的内容,您将更深入地了解正在发生的事情。