如何在 SLICK 中使用 SQL“LIKE”运算符

Posted

技术标签:

【中文标题】如何在 SLICK 中使用 SQL“LIKE”运算符【英文标题】:How to use SQL "LIKE" operator in SLICK 【发布时间】:2013-01-19 23:36:35 【问题描述】:

也许是个愚蠢的问题。但到目前为止我还没有找到答案。那么如何在SLICK中表示SQL的“LIKE”运算符呢?

【问题讨论】:

【参考方案1】:

一如往常!

val query = for 
  coffee <- Coffees if coffee.name like "%expresso%"
 yield (coffee.name, coffee.price)

会生成类似的SQL

SELECT name, price FROM coffees WHERE NAME like '%expresso%';

【讨论】:

谢谢。是 scala 查询还是 slick?对我来说,它只适用于 coffe.name.like("%expresso%") (带点分隔符)。 @Tim:您的语法等同于 Faiz 提出的语法(注意 coffeename 之间的点)。 不,它不 sschaef。 Faiz 的答案在 name 和 like 之间没有点 - 所以我得到一个编译器错误。如果我用点分隔名称和喜欢 - 没有错误。为什么?我应该导入一些命名空间吗? 有谁知道是否喜欢在绳子上进行卫生处理? if coffee.name like "%$queryStringFromUser%" 【参考方案2】:

这就是我让它工作的方式:

// argMap is map of type [Str, Str]
val query = for 
    coffee <- coffees if (
      argMap.map case (k,v) =>
        metric.column[String](k) like s"%$v%"
      .reduce(_ && _)
    )
   yield(coffee.name)

然后您可以使用您的数据库运行它: val res = db.run(query.result)

当然res在这里是一个future,你需要使用await来得到实际结果。

【讨论】:

【参考方案3】:

假设您有一个名为 logs 的表,其中包含 3 个字段 -

    身份证 留言 日期时间

您要执行 LIKE 操作。所以它会是:

 def data(data: ReqData): Future[Seq[Syslog]] =  
      sysLogTable
        .filter(_.datetime >= data.datetimeFrom)
        .filter(_.datetime <= data.datetimeUntil)
        .filter(_.message like s"%$data.phrase%")
        .result
 

注意:对于 sysLogTable

val sysLogTable: TableQuery[SyslogsTable] = TableQuery[SyslogsTable]
class SyslogsTable(tag: Tag) extends Table[Syslog](tag, "logs") 
  def id = column[Long]("id", O.PrimaryKey, O.AutoInc)

  def message = column[String]("message")

  def datetime = column[Timestamp]("date")

  def * = (id.?, message, datetime) <> ((Syslog.apply _).tupled, Syslog.unapply)

注意:对于 Syslog 案例类

case class Syslog(
   id: Option[Long],
   message: String,
   datetime: Timestamp
)

【讨论】:

以上是关于如何在 SLICK 中使用 SQL“LIKE”运算符的主要内容,如果未能解决你的问题,请参考以下文章

Slick:如何将 SQL LIKE 语句与 SQL IN 语句结合使用

如何在带有 php 用户输入的 SQL 中使用 like 运算符? [复制]

如何使用 SQL LIKE 运算符在列中搜索精确模式?

如何在 Sheetrock 中使用 LIKE 运算符

Cloud Firestore 中的 SQL LIKE 运算符?

在sql代码中使用Like运算符。语法错误