用户输入和数据库包括'%'并使用LIKE'%xx%'搜索数据库中的输入

时间:2016-06-17 02:28:47

标签: mysql sql

SELECT 
    BrokerData.BrokerName,
    Product.BAID, 
    Product.ProductName,
    Product.ProductName,
    Product.Type,
    Product.RevenueFactor,
    Product.VolumeFactor,
    Product.PriceFactor 
FROM Product
INNER JOIN BrokerData 
ON Product.BAID = BrokerData.BAID 
WHERE (ProductName Like '%xxx%' OR BaseProductName Like '%xxx%');

此查询将帮助用户搜索包含" xxx"的产品。但是,数据库在某些产品名称中包含%,因此,当用户输入为1%时,它将给出包含" 1"的产品。

我尝试使用CONTAINS,但它对此没有帮助。 以下是我使用CONTAINS的查询,但它也不起作用:

SELECT
    BrokerData.BrokerName,
    Product.BAID,
    Product.ProductName,
    Product.ProductName, 
    Product.Type,
    Product.RevenueFactor,
    Product.VolumeFactor,
    Product.PriceFactor
FROM Product
INNER JOIN BrokerData 
ON Product.BAID = BrokerData.BAID
WHERE CONTAINS ((ProductName Like '%xxx%') 
OR CONTAINS (BaseProductName Like '%xxx%'));

2 个答案:

答案 0 :(得分:2)

您的输入包含\的{​​{1}}之前需要转义码%

如果%是' 1%',请按照这样做;)

xxx

SQLFiddle DEMO HERE

另请参阅String Literals上的MySQL手册页。

答案 1 :(得分:0)

你可以这样做。 将您的用户输入替换为%to \%

示例演示代码:

CREATE TABLE data_with_percent(
data VARCHAR(255)
)

INSERT INTO data_with_percent VALUES('1%');
INSERT INTO data_with_percent VALUES('2%');
INSERT INTO data_with_percent VALUES('1');

SELECT * FROM data_with_percent WHERE data LIKE CONCAT('%',REPLACE('1%', '%', '\%'),'%');

测试如下: SQL Fiddle

谢谢。