我有以下SQL查詢,我想但是類似符號不爲字符串定義爲映射到油滑油滑:與作爲參數的列LIKE查詢
SELECT * FROM rates
WHERE '3113212512' LIKE (prefix || '%') and present = true
ORDER BY prefix DESC
LIMIT 1;
其中:
case class Rate(grid: String, prefix: String, present: Boolean)
class Rates(tag: Tag) extends Table[Rate](tag, "rates") {
def grid = column[String]("grid", O.PrimaryKey, O.NotNull)
def prefix = column[String]("prefix", O.NotNull)
def present = column[Boolean]("present", O.NotNull)
// Foreign keys
def ratePlan = foreignKey("rate_plan_fk", ratePlanId, RatePlans)(_.grid)
def ratePlanId = column[String]("rate_plan_id", O.NotNull)
def * = (grid, prefix, present) <>(Rate.tupled, Rate.unapply)
}
object Rates extends TableQuery(new Rates(_)) {
def findActiveRateByRatePlanAndPartialPrefix(ratePlan: String, prefix: String) = {
DB withSession {
implicit session: Session =>
Rates.filter(_.ratePlanId === ratePlan)
.filter(_.present === true)
.filter(prefix like _.prefix)
.sortBy(_.prefix.desc).firstOption
}
}
}
顯然,這是合乎邏輯的,這樣的事情是行不通的:
.filter(prefix like _.prefix)
和:
.filter(_.prefix like prefix)
將呈現不正確的SQL,而我還沒有考慮到 '%' 現在(僅在關於前綴子句:
(x2."prefix" like '3113212512')
相反的:
'3113212512' LIKE (prefix || '%')
中當然我可以使用靜態查詢來解決這個問題,但我想知道這是否可能?
爲了清楚起見,這裏是數據庫中的某些前綴
31
3113
312532623
31113212
和31113212預期結果
您可以添加生成的SQL嗎? – 2015-02-11 12:57:42
我已經更新了這個問題 – 2015-02-11 13:07:56
也許我沒有得到它,但這兩個不同(除了第二個'%'部分)?你是否將某個字符串與列匹配,或者其他方式的結果是相同的,還是我錯過了某些內容?或者,也許你的'prefix'列值已經有一個通配符,在這種情況下,這一切都是有道理的。 – 2015-02-11 13:12:17