我的数据库是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.*)
有没有更好的方法来实现这一目标?
答案 0 :(得分:4)
当... '{param}'
使用.on
传递字符串值时,JDBC语句准备为... ''$strVal''
,因为该值是根据JDBC转义的。
因此,应从SQL语句中删除单引号,而%
必须是转义字符串值的一部分。
SQL("""SELECT id, name
|FROM my_table
|WHERE name like {name}""")
.on('name -> s"{name}%").as(parser.*)
此外,字符串插值是无用的(SQL(s"...")
应该是SQL("...")
),因为Anorm占位符不是使用它准备的。
如果你想使用插值,最好使用Anorm。
SQL"""SELECT id, name
|FROM my_table
|WHERE name like ${name + "%"}""".
as(parser.*)
答案 1 :(得分:1)
我认为问题在于您尝试将参数传递给字符串内部。
我的意思是代替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.*)