squeryl查询中的模式匹配

时间:2012-12-26 19:27:18

标签: scala orm squeryl

我刚刚开始使用squeryl并且没有回答如何编写像这样的查询

SELECT ref label 
FROM x_table 
WHERE ref like x% or lable like x%

其中x是来自用户的某些值,尤其是我没有找到squeryl中的符号%的类似物,或者我如何使用它。

我的版本:

val products = from(AppDB.productTable) (
    s => where ((s.label like value) or (s.ref like value))  select(s)
)

无效。

val value : Option[String]我来自用户。

2 个答案:

答案 0 :(得分:1)

您可以尝试选择字段,例如:

val products = from(AppDB.productTable) (s => 
  where ((Some(s.label) like value) or (Some(s.ref) like value)) 
  select(s))

这将编译,因为查询将Option [String]与Option [String]进行比较。 Squeryl将在内部处理选项状态。

如果您只是想将通配符添加到您要比较的内容中,假设like子句的两边都是Option[String]类型,那么您可以这样做:

s.label like value.map(_ + "%")

答案 1 :(得分:0)

您可以使用更短的版本:

AppDB.productTable.where ((s.label like value) or (s.ref like value))

和选项字段用于可为空的列