我有一张桌子(承运商)我正在找。我使用LIKE来查询数据库。我正在查询一个表中的两列(cName、code),然后检查它是否处于活动状态。如果是,则返回结果。我的问题是,如果我搜索代码" ABCD“,我没有得到任何返回(这是正确的原因ABCD是不活动的。当我搜索ABCD (American Bu...)的运营商名称时。我得到一条返回的记录(这是错误的,因为客户处于非活动状态)。如何强制sql不显示非活动运营商?下面是我的sql:
SELECT carrierID, cName, code
FROM carriers
WHERE
(
cName LIKE '%" & replace(q,"'","''") & "%'
OR code LIKE '%" & replace(q,"'","''") & "%'
)
AND active='True'发布于 2016-07-27 02:51:57
假设您是在web服务器或客户端上构建SQL。
Declare mySQL as String = "SELECT carrierID, cName, code FROM carriers WHERE CharIndex('[getSearch]',cName) + CharIndex('[getSearch]',code) > 0 and active='True'"
mySQL = Replace(mySQL,"[getSearch]",replace(q,"'","''"))仅供参考,CharIndex比LIKE更快
发布于 2016-07-27 02:45:10
我已经为您的查询创建了以下示例。只要以这种格式提供值,就可以得到预期的结果。我认为你的拼接有问题。您可以尝试使用SQL Profiler进行检查,以查看要发送到SQL server的内容。
CREATE TABLE carriers
(
carrierID INT
, cName VARCHAR(50)
, code VARCHAR(50)
, active VARCHAR(5)
)
GO
INSERT INTO carriers VALUES (1, 'ABCD', 'XYZ', 'False')
INSERT INTO carriers VALUES (2, 'test', 'abcd', 'False')
INSERT INTO carriers VALUES (3, 'ABCD2', 'XYZ', 'True')
INSERT INTO carriers VALUES (4, 'test2', 'abcd2', 'True')
SELECT carrierID, cName, code
FROM carriers
WHERE
(
cName LIKE '%ABCD%'
OR code LIKE '%ABCD%'
)
AND active='True'https://stackoverflow.com/questions/38597316
复制相似问题