Stan's Blog

[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

SQL SUBSTRING 函數

----- 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 碼, 所以只要後面加百分比符號 (%) 即可