2016-06-17 13 views
0
​​

を検索するLIKE「%単位xx%」を使用すると、ユーザーは、「XXX」を含む製品を検索するのに役立ちます。ただし、データベースには製品名の一部に%が含まれているため、ユーザー入力が1%の場合、「1」を含む製品が提供されます。ユーザの入力やデータベースは、「%」が含まれ、このクエリのデータベースに入力するために

私はCONTAINSを使用しようとしましたが、これは役に立ちません。 follwingは、私が使用含むクエリですが、それも動作しません:あなたはこれを行うことができ

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%')); 

答えて

0

。以下のよう

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

ありがとうございました。

+0

私は '|%'をエスケープするように変更しましたが、「データが見つかりません」と表示されました。ユーザーがデータベース内にないものを入力すると、データが見つかりません。しかし、私は1%がデータベースの中にいると確信しています。しかし助けてくれてありがとう:) – kllow

+0

ねえ、私はデモのmysqlコードで返信を編集しました。あなたはそれを試すことができます。 –

+0

こんにちは、私はクエリを試したが、nullを返します。 – kllow

2

入力が%%の前にエスケープコード\が必要です。

xxxは '%1' である場合、このようにそれを行う;)

ProductName LIKE '%1\%%' 

SQLFiddle DEMO HERE

また、String LiteralsにMySQLのマニュアルページを参照してください。

+0

私はコードを使用した後、それは私に "悪いJSONエスケープシーケンス:\%。"を与えます。とにかく、助けてくれてありがとう: – kllow

+0

@kllow '悪いJSONエスケープシーケンス:\%'、これはmysqlがあなたや他のどこかに与えるものですか? – Blank

+0

私はjsonを使用しているので、他の場所。 – kllow

関連する問題