我有一张桌子(承运人)我正在搜索。我使用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'
答案 0 :(得分:1)
假设您正在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,"'","''"))
fyi CharIndex比LIKE快
答案 1 :(得分:0)
我在下面为您的查询创建了一个示例。只要您以此格式提供值,就可以获得结果。我相信你的连接有问题。您可以尝试使用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'