我有以下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