我们的网络应用程序中有一个搜索功能正在使用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:右括号}
答案 0 :(得分:1)
LIKE条件是在没有字符串连接的情况下构建的
...query... WHERE ... LIKE lower('%||CHR(123)||%')
- &gt; ...query... WHERE ... LIKE ('%'||CHR(123)||'%')
答案 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 {}
也许我为你的案例写了不正确的正则表达式,但至少你可以用它来查找包含{
的任何字符串