2010-10-27 77 views
0

真不簡單,我想選擇以字母開頭的所有標題「A」,而忽略了在字符串的開始衝刺。MYSQL選擇上修剪

SELECT * TRIM(LEADING '- ' FROM title) WHERE title LIKE 'A%' 

這似乎不工作。請幫忙。謝謝。

回答

1
SELECT TRIM(LEADING '- ' FROM title) FROM [missing table here] WHERE TRIM(LEADING '- ' FROM title) LIKE 'A%' 
3

如果你想體面的速度,你應該儘可能避免每行功能。通常,我會建議插入/更新觸發器來存儲修改後的數據,以便對所有選擇的計算成本進行分攤(請參閱here以獲得解釋以及我遵循的一些其他準則),但對於此特定情況,有一個更簡單的方法* a

只需使用:

select * from table where title like 'A%' or title like '- A%' 

如果你的DBMS的執行引擎是什麼好,就會把它轉換成兩個非常快(假設標題索引)傳遞的數據而無需處理每一行在桌子裏。

如果你的執行引擎是聰明,嘗試:

select * from table where title like 'A%' 
union all select * from table where title like '- A%' 

,看看是否有幫助。請確保您使用union all,而不僅僅是union。後者將試圖刪除重複的,不必要在這種情況下,因爲一個標題不能既"A""- A"啓動。

而且,與所有的優化,措施,不用猜!


*一個你仍然可能要考慮使用觸發器/柱外的方法,如果有你想要一個大小寫不敏感的一個機會。在這個答案的方法將工作好了不區分大小寫的第一個字母(a%/A%/-a%/-A%),但會迅速降解,如果你正在尋找類似的物品開始Bill這將需要32項獨立的條款(2個與字母組合和沒有連字符前綴)。

0
SELECT * TRIM(LEADING '- ' FROM title) WHERE title LIKE 'A%' 

您的where子句永遠不會工作,因爲您試圖與POST調整數據進行比較,但數據庫正在對TRIM進行比較。

有兩種選擇:

SELECT * 
FROM table 
WHERE title LIKE '- A%' 

SELECT *, TRIM(LEADING '- ' FROM title) AS title 
FROM table 
WHERE title LIKE 'A%' 

在這兩個,第一個是優選的,因爲它允許使用索引。第二個,因爲你正在比較動態派生的數據,不會。