2016-11-15 49 views
3

這是一個學習意義的問題,而不是我需要找到的解決方案。 我有一個產品實體,它有一個product_name的屬性。我想搜索product_name並返回product_name中具有多個1'a'的所有產品。我需要幫助來解決這個問題。包含2個或更多字符的sql名稱

此代碼顯示有「A」

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

所有產品,但有產品超過1「A」之後我。 結構:產品

Product(p_Id, product_name, p_cost) 

所以,如果我有一個名爲「汽車使用說明書」的產品將因爲有3「的回報。 請幫忙。

回答

3

查詢看起來像:

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

不要爲列別名使用單引號。最好的辦法是命名列,以免它們被轉義。否則,根據數據庫使用反引號,雙引號或方括號。

+0

謝謝你,比我想象的更簡單。我想我不得不使用Count()。再次感謝 – Jones

+0

因此,如果我想向第二個字母顯示'a'的產品: – Jones

+0

下劃線然後是% – Jones

0

你可以使用另一個技巧是刪除所有「A」字符的名稱列,然後檢查是否長度減少了兩個或兩個以上:

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

這是一個很酷的把戲!謝謝 – Jones

+0

這是最佳方法嗎?相比於@Gordon Linoff的解決方案 –

+0

@MuhammadFaizanUddin好的問題。戈登的方法可能會稍微好一些,但是一旦發現第二個字母「a」,MySQL可以停止掃描該名稱。我對'REPLACE'的調用將強制MySQL爲'a'掃描整個名稱,無論它出現多少次。這兩種解決方案都會隨着桌子的增長而擴展。 –

相關問題