对两个不同的列使用LIKE并不会返回所需的结果

时间:2016-07-26 18:26:00

标签: sql-server

我有一张桌子(承运人)我正在搜索。我使用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'

2 个答案:

答案 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'