IT박스

SQL 문자열에서 앰퍼샌드 문자 이스케이프

itboxs 2020. 7. 9. 19:32
반응형

SQL 문자열에서 앰퍼샌드 문자 이스케이프


내 SQL 데이터베이스에서 이름으로 특정 행을 쿼리하려고하는데 앰퍼샌드가 있습니다. 이스케이프 문자를 설정하고 앰퍼샌드를 이스케이프하려고했지만 어떤 이유로 든 작동하지 않으며 정확히 내 문제가 무엇인지 확실하지 않습니다.

Set escape '\'
    select * from V1144engine.T_nodes where node_id in(
    select node2_id from V1144engine.T_edges where node1_id in(
    select node2_id from V1144engine.T_edges where node1_id in(
    select node2_id from V1144engine.T_edges where node1_id = 
      (select node_id from V1144engine.T_nodes where node_name = 'Geometric Vectors \& Matrices')))
    and edge_type_id = 1)
    and node_type_id = 1
    and node_id in (
    select node2_id from V1144engine.T_edges where node1_id =
      (select node_id from V1144engine.T_nodes where node_name = 'Algebra II')
    and edge_type_id = 2);

이것은 이 질문 과 비슷한 해결책을 가지고 있지만 문제는 매우 다르게 제기됩니다. 그들은 같은 해결책을 가질 수도 있지만 질문이 동일하다는 것을 의미하지는 않습니다.


대신에

node_name = 'Geometric Vectors \& Matrices'

사용하다

node_name = 'Geometric Vectors ' || chr(38) || ' Matrices' 

38은 앰퍼샌드의 ASCII 코드이며이 형식에서는 문자열로 해석됩니다. 나는 그것을 시도했고 효과가 있었다.

또 다른 방법은 LIKE와 밑줄 대신 '&'문자를 사용하는 것입니다.

node_name LIKE 'Geometric Vectors _ Matrices' 

이 문자 하나만 다른 다른 레코드도 찾을 가능성은 매우 낮습니다.


이스케이프는 \기본적으로 설정되어 있으므로 설정할 필요가 없습니다. 하지만 그렇게한다면 따옴표로 묶지 마십시오.

앰퍼샌드는 SQL * Plus 치환 변수 마커입니다. 그러나 다음과 같이 변경 하거나 더 유용하게 사용할 수 있습니다 .

set define off

그런 다음 값을 이스케이프 처리 할 필요가 없습니다.


당신이 사용할 수있는

set define off

이것을 사용하면 입력하라는 메시지가 표시되지 않습니다


오라클 SQL 기초 책에서 바로

SET DEFINE OFF
select 'Coda & Sid' from dual;
SET DEFINE ON

define을 설정하지 않고 어떻게 벗어날 수 있을까요?


탈출하기 위해 &다음과 같은 방법을 시도 할 수 있습니다 :-

  1. set scan off
  2. set define off
  3. set escape on다음 대체 &에 의해/&
  4. 교체 &&&

그들 중 하나는 적어도 작동해야합니다.

사용하는 dditionally 경우 PL / SQL 개발자는이 및 아이콘 SQL 창 하단에서이 가서하시기 바랍니다 비활성화 . 이전 버전에서는이 옵션이 없습니다.

또한 set define off가 스크립트의 맨 처음에 작성되었는지 확인하십시오.


set escape on
... node_name = 'Geometric Vectors \& Matrices' ...

또는 대안 적으로 :

set define off
... node_name = 'Geometric Vectors & Matrices' ...

첫 번째는 백 슬래시를 사용하여 &를 피할 수 있습니다.

두 번째는 "전역 적으로"꺼지고 "어딘가에 백 슬래시를 추가 할 필요가 없습니다". set define on앰퍼샌드의 해당 줄에서 다시 켜면 특별한 의미를 갖기 때문에 스크립트의 일부 부분에서는 사용하지 않을 수 있습니다.


REPLACE(<your xml column>,'&',chr(38)||'amp;')

이것은 또한 작동합니다 :

select * from mde_product where cfn = 'A3D"&"R01'

문자열에서 &이중 qoutes "&"를 포함하여 리터럴로 정의 합니다.

참고URL : https://stackoverflow.com/questions/12961215/escaping-ampersand-character-in-sql-string

반응형