2016-11-15 11 views
3

これは解決策を見つけるために必要な以上の意味を学習するための質問です。 私は製品エンティティを持っていて、属性はproduct_nameです。私はproduct_nameを検索し、product_nameに1以上の 'a'を持つすべての商品を返したいと思います。私はこれのための質問で助けが必要です。2つ以上の文字列を含むSQL名

このコードは持っている「」

SELECT product_name AS 'Product Names' FROM product WHERE name LIKE '%a%' 

すべての製品を示していますが、私が持っている製品より1「」の後です。 構造:私は「車の取扱説明書」と呼ばれる製品を持っていた場合は3「のがあるとして製品

Product(p_Id, product_name, p_cost) 

だからそれが返されます。 助けてください。

答えて

3

クエリは次のようになります。列の別名のための単一引用符を使用しないでください

SELECT product_name AS ProductNames 
FROM product 
WHERE name LIKE '%a%a%'; 

。列の名前を付けてエスケープする必要はありません。それ以外の場合は、データベースに応じてバッククォート、二重引用符、または角カッコを使用します。あなたが使用することができ

+0

ありがとうございました、私が想像よりも簡単でした。私はCount()を使わなければならないと思っていました。ありがとうございました – Jones

+0

だから、2番目の文字に「a」という商品を表示したいのであれば、それは – Jones

+0

になります。次にアンダースコアを次に% – Jones

0

もう一つのトリックは、すべての名前の欄にある「」の文字を削除し、長さが2以上減少したかどうかを確認することです:

SELECT product_name AS ProductNames 
FROM product 
WHERE LENGTH(REPLACE(name, 'a', '')) <= LENGTH(name) - 2 
+0

それはクールなトリックです!ありがとう – Jones

+0

それは最適なアプローチですか? @Gordon Linoffの解と比較して –

+0

@MuhammadFaizanUddin良い質問です。ゴードンのアプローチは少し良くなっていますが、MySQLは2番目の文字「a」が見つかるとすぐに名前のスキャンをやめることができます。 'REPLACE'を呼び出すと、何回出現したかにかかわらず、MySQLは' a'の名前全体をスキャンします。両方のソリューションは、テーブルが成長するのと同じように拡張されます。 –

関連する問題