真不簡單,我想選擇以字母開頭的所有標題「A」,而忽略了在字符串的開始衝刺。MYSQL選擇上修剪
SELECT * TRIM(LEADING '- ' FROM title) WHERE title LIKE 'A%'
這似乎不工作。請幫忙。謝謝。
真不簡單,我想選擇以字母開頭的所有標題「A」,而忽略了在字符串的開始衝刺。MYSQL選擇上修剪
SELECT * TRIM(LEADING '- ' FROM title) WHERE title LIKE 'A%'
這似乎不工作。請幫忙。謝謝。
SELECT TRIM(LEADING '- ' FROM title) FROM [missing table here] WHERE TRIM(LEADING '- ' FROM title) LIKE 'A%'
如果你想體面的速度,你應該儘可能避免每行功能。通常,我會建議插入/更新觸發器來存儲修改後的數據,以便對所有選擇的計算成本進行分攤(請參閱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個與字母組合和沒有連字符前綴)。
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%'
在這兩個,第一個是優選的,因爲它允許使用索引。第二個,因爲你正在比較動態派生的數據,不會。