WHERE [SOTR_CUST_CODE] = 'O004'
AND [SOTD_STRC_CODE] LIKE 'PC%'
OR [SOTD_STRC_CODE] LIKE 'PD%'
这会返回不是“O004”的客户记录,而且我不确定原因。还有一种更好的方法来搜索一个字符串,该字符串可以从2个不同的字符集开始而不使用LIKE
函数两次吗?
使用SQL Server 2012
答案 0 :(得分:4)
您需要在子句中使用括号。如果没有括号,则表示:
(A和B)OR C
因此,无论条件A或B如何,您都将获得与条件C匹配的所有记录。
答案 1 :(得分:1)
我知道它已经有了非常好的答案(感谢Laposhasu Acsa),但想为未来的读者澄清:
下面的代码(没有括号)与(A和B)或C
相同
WHERE [SOTR_CUST_CODE] = 'O004'
AND [SOTD_STRC_CODE] LIKE 'PC%'
OR [SOTD_STRC_CODE] LIKE 'PD%'
首先解决方案是使用括号:
WHERE [SOTR_CUST_CODE] = 'O004'
AND ([SOTD_STRC_CODE] LIKE 'PC%'
OR [SOTD_STRC_CODE] LIKE 'PD%')
适合这种特殊情况的第二种解决方案是:
WHERE [SOTR_CUST_CODE] = 'O004'
AND [SOTD_STRC_CODE] LIKE 'P[CD]%'