How to handle/use special characters like percent (%) and ampersand (&) in Oracle SQL queries

人盡茶涼 提交于 2020-06-25 09:35:27

问题


I need to include the special character "%" in my LIKE clause in a SQL query, e.g.:

Select * From Some_Table Where Field_Name Like 'bla%bla&2';

How do I write that?


回答1:


If you want to match Field_Name values that contain 'bla%bla&2', then you need to write this:

set define off
Select * From Some_Table Where Field_Name Like '%bla\%bla&2%' escape '\';

You get to specify which character you want to use to escape a following character (thanks should go to mathguy, not me). You also have to set define off to prevent sqlplus from trying to substitute values in a string.

If, however, you want to match Field_Name values that exactly equal the given string, then you do this instead:

set define off
Select * From Some_Table Where Field_Name = 'bla%bla&2';



回答2:


If I am not mistakend you escape them with a backslash (\)

Select * From Some_Table Where Field_Name Like 'bla\%bla&2' ESCAPE '\';



回答3:


Use escape \ to treat is a literal

SELECT *
  FROM Some_Table
 WHERE Field_Name LIKE 'blah\%'|| 'blah' ||'&'|| '2';



回答4:


I'll guess that you're using a tool which treats &n, where n is a digit, as a variable marker. If you're using SQL*Plus or SQL Developer you'd need to issue the SQL*Plus command SET DEFINE OFF. Other tools may use other methods to accomplish this.

Best of luck.




回答5:


I do not think the backslash escape character will work here for the ampersand. Instead, you will want to divide your search into concatenated strings using double pipes. Use single quotes around each piece of literal text. Next, replace the & with chr(38) which is the ampersand. You can see this with:

select chr(38) from dual

You will still want to include the backslash before the % and finish your statement with escape '\'. Notice, I did not quote the chr(38).

select * From Some_Table Where Field_Name Like 'bla\%bla'||chr(38)||'bla' escape '\'


来源:https://stackoverflow.com/questions/45446767/how-to-handle-use-special-characters-like-percent-and-ampersand-in-oracl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!