Anorm查询中如何使用'like'?
How to use 'like' in Anorm query?
我的数据库是 porstgres,我正在尝试编写一个将使用 like 或 ~(postgres 正则表达式)的查询。
我无法使用 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.*)
有没有更好的方法来实现这个?
我认为问题在于您试图将参数传递到字符串内部。
我的意思是 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.*)
当使用 .on
传递字符串值的 ... '{param}'
时,JDBC 语句准备为 ... ''$strVal''
,因为值根据 [=26] 进行了转义=].
所以应该从 SQL 语句中删除单引号,并且 %
必须是转义字符串值的一部分。
SQL("""SELECT id, name
|FROM my_table
|WHERE name like {name}""")
.on('name -> s"{name}%").as(parser.*)
此外,字符串插值是无用的(SQL(s"...")
应该是 SQL("...")
),因为 Anorm 占位符不是使用它准备的。
如果要使用插值,最好使用Anorm one
SQL"""SELECT id, name
|FROM my_table
|WHERE name like ${name + "%"}""".
as(parser.*)
我的数据库是 porstgres,我正在尝试编写一个将使用 like 或 ~(postgres 正则表达式)的查询。 我无法使用 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.*)
有没有更好的方法来实现这个?
我认为问题在于您试图将参数传递到字符串内部。
我的意思是 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.*)
当使用 .on
传递字符串值的 ... '{param}'
时,JDBC 语句准备为 ... ''$strVal''
,因为值根据 [=26] 进行了转义=].
所以应该从 SQL 语句中删除单引号,并且 %
必须是转义字符串值的一部分。
SQL("""SELECT id, name
|FROM my_table
|WHERE name like {name}""")
.on('name -> s"{name}%").as(parser.*)
此外,字符串插值是无用的(SQL(s"...")
应该是 SQL("...")
),因为 Anorm 占位符不是使用它准备的。
如果要使用插值,最好使用Anorm one
SQL"""SELECT id, name
|FROM my_table
|WHERE name like ${name + "%"}""".
as(parser.*)