[Rails] 在 where 裡使用 SQL function substring
最近碰到一個需求, A model after_create 後要用新建的 instance, 去跟 B model 的欄位比對字串
這時候可以使用 like, 不過因為我只想用 A model instance colmun 比對 B modle column 前 8 碼
這時可以使用 substring
B.where("substring(text, 1, #{tac.length}) = #{tac}")
substring 裡面第一個參數是你要比對的欄位, 第二個參數是起始位置, 第三個參數是長度 等於後面的變數是要比較的 key
—– Update —–
本來想用 substring + 打 index 實作, 後來發現 substring 吃不到 index QQ
後來用 like + 打 index (將要比對的 column 前 8 碼打 index Creating an index with specific key length) 解決了
B.where("text LIKE ?", "#{tac}%")
這邊要注意的是, 如果前後都包了百分比符號 (%), 則不會觸發 index
我這次的需求是比對前 8 碼, 所以只要後面加百分比符號 (%) 即可