복붙노트

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

SQL

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);

문제는이 질문에 대한 비슷한 솔루션을 가지고 있지만, 문제는 매우 다르게 제기된다. 그들은 같은 솔루션을 가지고 끝낼 수 있지만, 그 질문이 동일하다는 것을 의미하지 않는다.

해결법

  1. ==============================

    1.대신에

    대신에

    node_name = 'Geometric Vectors \& Matrices'
    

    사용하다

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

    (38)는 앰퍼샌드에 대한 아스키 코드이며,이 형태로 문자열, 아무것도로 해석됩니다. 나는 그것을 시도하고 일했다.

    또 다른 방법은 LIKE와 밑줄 대신 '&'문자를 사용 할 수 있습니다 :

    node_name LIKE 'Geometric Vectors _ Matrices' 
    

    오직이 하나 개의 문자에 다른 당신이 너무 다른 기록을 찾을 수있는 가능성은 매우 낮다.

  2. ==============================

    2.당신이 그것을 설정할 필요가 없습니다 탈출은 기본적으로 \로 설정되어 당신이 경우에 있지만, 따옴표로 포장하지 않습니다.

    당신이 그것을 설정할 필요가 없습니다 탈출은 기본적으로 \로 설정되어 당신이 경우에 있지만, 따옴표로 포장하지 않습니다.

    앰퍼샌드는 SQL * Plus를 대체 변수 마커이다; 하지만 당신은 그것을 변경, 또는 좀 더 유용하게 귀하의 경우와 완전히 해제 할 수 있습니다 :

    set define off
    

    그럼 당신은 모든의 값을 이스케이프 귀찮게 할 필요가 없습니다.

  3. ==============================

    3.당신이 사용할 수있는

    당신이 사용할 수있는

    set define off
    

    그것은이 입력에 대한 프롬프트하지 않습니다 사용

  4. ==============================

    4.바로 오라클 SQL 기초 책에서

    바로 오라클 SQL 기초 책에서

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

    어떻게 정의 설정하지 않고 그것을 피할 것.

  5. ==============================

    5.탈출 & 당신은 다음과 같은 방법을 시도 할 수 있습니다 위해 : -

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

    그 중 하나이어야 작동합니다.

    당신은 PL / SQL 개발자를 사용하고 또한이라면이 및 아이콘 SQL 창 하단에를 가서 해제하시기 바랍니다. 이전 버전에서 참고이 옵션은 존재하지 않습니다.

    또한 반드시 설정이 매우 스크립트의 시작에 기록 된 오프 정의합니다.

  6. ==============================

    6.이뿐만 아니라 작동합니다 :

    이뿐만 아니라 작동합니다 :

    mde_product SELECT * FROM 곳 CFN은 = 'A3D "&"R01'

    당신은 정의 및 바깥에 의해 문자로 문자열에 큰 따옴표 함께 "&".

  7. ==============================

    7.

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

    또는 대안 :

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

    첫 번째는 당신이 & 탈출 백 슬래시를 사용할 수 있습니다.

    & "전 세계적으로"오프 두 번째 회전 (필요는 백 슬래시 어느 곳을 추가합니다). 스크립트의 일부 부품이 아닌 다른 사람을 끌 수 있도록, 자신의 특별한 의미를 다시 얻을 것이다에와 앰퍼샌드 그 라인에서 정의 세트에 의해 다시 켤 수 있습니다.

  8. ==============================

    8.

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

    9.나는 도움이 찾을 수있는 정규식을 썼다 "&"는 INSERT에서, 나는이 사람을 도움이되기를 바랍니다 대체합니다.

    나는 도움이 찾을 수있는 정규식을 썼다 "&"는 INSERT에서, 나는이 사람을 도움이되기를 바랍니다 대체합니다.

    트릭은 "&"다른 텍스트로했다 있는지 확인했다.

    "(\ '[^ \'* (? = \ &)) (\ &) ([^ \ '* \')"찾기

    '$ 1'교체 || CHR (38) || '$ 3 "

  10. from https://stackoverflow.com/questions/12961215/escaping-ampersand-character-in-sql-string by cc-by-sa and MIT license