[英]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.