我有一个基于一组条件收集信息的查询.基本上我想知道一个位置当天是否支付了超过50美元或评论部分中有"过滤器"一词......
我的查询是:
SELECT Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime, Update_UserName, Till_Number
FROM Paid_Out_Tb
WHERE (Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0,
GETDATE()), 0)) AND (Paid_Out_Amount > 50) OR
(Paid_Out_Comment LIKE N'%' + 'Filter' + '%')
Run Code Online (Sandbox Code Playgroud)
问题是它返回460结果,应该只返回2.
您需要将Paid_Out_Amoutn和Paid_Out_Comment条件包装在第二组括号中:
SELECT Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime,
Update_UserName, Till_Number
FROM Paid_Out_Tb
WHERE (Store_Id = 1929) AND (Paid_Out_Datetime >=
DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND
(Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)) AND
(
(Paid_Out_Amount > 50) OR (Paid_Out_Comment LIKE N'%' + 'Filter' + '%')
)
Run Code Online (Sandbox Code Playgroud)
小智 5
这实际上取决于你使用的是什么.您的Paid_Out_Amount大于50或Paid_Out_Amount类似于N%Filter%.在你的子句中添加一些括号
WHERE
(
(1 = 1)
AND
(2 = 2)
)
OR
( 3 = 3 )
Run Code Online (Sandbox Code Playgroud)
SELECT Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime, Update_UserName, Till_Number
FROM Paid_Out_Tb
WHERE (Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0,
GETDATE()), 0)) AND (Paid_Out_Amount > 20) OR
(Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0,
GETDATE()), 0)) AND (Paid_Out_Comment LIKE N'%' + 'Filter' + '%')
Run Code Online (Sandbox Code Playgroud)
我结合了您的一些建议,并得出了上述内容。这有效。谢谢!