繁体   English   中英

如何在Anorm查询中使用'like'?

[英]How to use 'like' in Anorm query?

我的数据库是porstgres,我正在尝试编写一个使用like或〜(postgres regex)的查询。 我无法使用on编写此查询。

所以这就是我试着写的:

SQL(s"""SELECT id, name
       |FROM my_table 
       |WHERE name ~ '^{name}'""")
.on('name -> name).as(parser.*)

要么:

SQL(s"""SELECT id, name
       |FROM my_table 
       |WHERE name like '{name}%'""")
.on('name -> name).as(parser.*)

适合我的代码不使用。 它看起来像这样:

SQL(s"""SELECT id, name
       |FROM my_table 
       |WHERE name """.concat(s"like '$name%'").as(parser.*)

有没有更好的方法来实现这一目标?

当使用.on使用.on传递的字符串值的... '{param}'时,JDBC语句准备为... ''$strVal'' ,因为该值是根据JDBC转义的。

因此,应从SQL语句中删除单引号, %必须是转义字符串值的一部分。

SQL("""SELECT id, name
   |FROM my_table 
   |WHERE name like {name}""")
  .on('name -> s"{name}%").as(parser.*)

此外,String Interpolation是无用的( SQL(s"...")应该是SQL("...") ),因为Anorm占位符不是使用它准备的。

如果你想使用插值,最好使用Anorm one。

SQL"""SELECT id, name
   |FROM my_table 
   |WHERE name like ${name + "%"}""".
  as(parser.*)

我相信问题是你试图将参数传递给字符串内部。

我的意思是,而不是WHERE name like '{name}%'WHERE name like '{name}%'它应该只是WHERE name like {name}

SQL(s"""SELECT id, name
       |FROM my_table 
       |WHERE name like {name}""")
.on('name -> "foo%").as(parser.*)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM