2012-09-24 78 views
2

我試圖從列中值的開始處排除'A'和'The'。我在尋找藝術家開始以字母「A」,如:SQL從搜索結果的開始處排除'The'

AND artist LIKE LOWER('A%') AND artist NOT LIKE LOWER('A %') 

問題是這樣會給我的藝術家開始以「%」,而不是給我的藝術家以「%」開始,但它會也排除以'AA%'開頭的藝術家

如果某個樂隊決定將自己命名爲「A Apple」,他們將被排除在我的搜索範圍之外。我怎麼能做這個查詢不排除'A%'

在此先感謝! 周杰倫

+2

周杰倫,歡迎來到Stack Overflow。當問一個問題時,最好用你正在使用的數據庫標記它,並提供樣本輸入和輸出。 –

+0

而你的問題的答案是你不能。在名稱的開頭,你如何區分「A蘋果」和「A」的其他用途?要麼刪除最初的「A」,要麼不要。 –

回答

0

如果你對數據庫結構的控制,特別是如果這是一個龐大的數據庫,它可能只需添加一個包含藝術家姓名的「SearchArtist」列即可,因爲它會顯示在搜索結果中或用於排序。通過這種方式,您可以顯示全名,但可按可搜索名稱進行排序:

選擇藝術家表格表的順序搜索藝術家;

那種方式滾石會出現在列表中的Steppenwolf之前...

0
AND artist LIKE ('A%') 
AND (artist NOT LIKE LOWER('A %') OR artist LIKE ('A A%')) 

我希望這是一個愛好或小型數據庫,因爲LIKE語句不會對性能非常友好。

0

這是一個常見和麻煩的問題,通常通過在第二個字段中包含藝術家姓名的形式「Rolling Stones,The」以及顯示名稱「The Rolling Stones」來解決。對前者執行搜索,但使用後者顯示結果。

但如果你堅持,你已經得到了數據,你需要的東西,如:

AND UPPER(artist) LIKE 'A%' 
AND (UPPER(artist) LIKE 'A A%' OR NOT (UPPER(artist) LIKE 'A %')) 
+0

我可以看到另一位理查德在寫作時回覆。我必須承認,我不明白爲什麼在操作系統或答案中將'LOWER()'應用於謂詞的RHS。 – RET