使用LIKE查询打开大括号

时间:2018-05-10 17:51:42

标签: java sql oracle escaping

我们的网络应用程序中有一个搜索功能正在使用Oracle(版本在Oracle10g之后),我正在使用SQL构建Java查询。< / p>

根据documentation,您在curly braces {..}中放入的任何内容都会被转义。但是,我也想提供{的搜索,当我尝试搜索包含{的字符串时,它会发现org.hibernate.QueryException: Unmatched braces for alias path错误,因为它会查找结束括号。

到目前为止我尝试了什么;

...query... WHERE ... LIKE lower('%{{%') ESCAPE '{'

...query... WHERE ... LIKE lower('%\{%') ESCAPE '\'

...query... WHERE ... LIKE lower('%{{}%')

...query... WHERE ... LIKE lower('%CHR(123)%')

...query... WHERE ... LIKE lower('%||CHR(123)||%')

前两个仍然导致错误。其他的不会导致任何错误,但它们不会返回包含{的结果。这种情况有什么工作吗?

PS:我不能使用预准备语句,因为查询有图例部分。不幸的是,它必须使用字符串手动构建。

PS2:右括号}

没有问题

2 个答案:

答案 0 :(得分:1)

LIKE条件是在没有字符串连接的情况下构建的

...query... WHERE ... LIKE lower('%||CHR(123)||%') - &gt; ...query... WHERE ... LIKE ('%'||CHR(123)||'%')

Env to try this out

答案 1 :(得分:0)

尝试使用REGEXP_LIKE

select * from (select 'some string contains {}' as msg from dual
 union select 'some string without curly braces' as msg from dual) t 
where REGEXP_LIKE(t.msg, '.*[{].*')

结果:some string contains {}

也许我为你的案例写了不正确的正则表达式,但至少你可以用它来查找包含{的任何字符串