Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何使用SQL;例如;机灵的操作员_Scala_Scalaquery_Slick - Fatal编程技术网

Scala 如何使用SQL;例如;机灵的操作员

Scala 如何使用SQL;例如;机灵的操作员,scala,scalaquery,slick,Scala,Scalaquery,Slick,也许是个愚蠢的问题。但到目前为止,我还没有找到答案。那么,如何在中表示SQL的“LIKE”操作符呢?与您通常所做的完全一样 val query = for { coffee <- Coffees if coffee.name like "%expresso%" } yield (coffee.name, coffee.price) 我就是这样让它工作的: // argMap is map of type [Str, Str] val query = for { coffee

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

与您通常所做的完全一样

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

我就是这样让它工作的:

// 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)
//argMap是[Str,Str]类型的映射
val query=for{
咖啡
metric.column[String](k)类似于s“%${v}%”
}.减少(&&&)
)
}产量(咖啡名称)
然后您可以使用您的数据库运行此操作:
val res=db.run(query.result)


当然,
res
在这里是一个未来,您需要使用wait来获得实际结果。

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

  • 身份证
  • 信息
  • 日期时间
  • 您希望执行类似的操作。因此,它将是:

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

    谢谢这是一个疑问还是圆滑?对我来说,在slick中,它只适用于coffe.name。比如(“%expresso%”)(带点分隔符)。@Tim:您的语法与Faiz给出的语法相同(注意
    coffee
    name
    之间的点)。不,它不适用。Faiz的答案在名字和like之间没有点-所以我得到了一个编译器错误。如果我把名字和喜欢的点分开-没有错误。为什么?我应该导入一些名称空间吗?有人知道字符串上是否有like吗?如果coffee.name像“%${queryStringFromUser}%”
     def data(data: ReqData): Future[Seq[Syslog]] =  {
          sysLogTable
            .filter(_.datetime >= data.datetimeFrom)
            .filter(_.datetime <= data.datetimeUntil)
            .filter(_.message like s"%${data.phrase}%")
            .result
     }
    
    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)
    }
    
    case class Syslog(
       id: Option[Long],
       message: String,
       datetime: Timestamp
    )