2016-06-15 1 views
1

null이거나 비어 있지 않은 문자열에 여러 매개 변수를 결합하는 함수가 있습니다. 특정 매개 변수에서 LIKE 조건에 % 문자를 사용합니다. 제 문제는 매개 변수 인 것처럼 변환을 수행하는 형식 함수입니다. 어떻게 이것을 피할 수 있습니까?문자열에 %가있을 때 PostgreSQL에서 format 함수를 사용하는 방법은 무엇입니까?

필자는 매개 변수와 여러 LIKE에 대해 10 가지 이상의 테스트를 수행합니다. 두 번째 FORMAT 기능 아래의 예에서 테스트 %의 %를 변환하려고

_nom_personne_like := 'TEST%'; 
_type_activite_personne := 'SOMETHING'; 
IF _nom_personne_like != '' THEN 
    _query := _query || ' AND personne_planning.nom_personne LIKE %L '; 
    _query := FORMAT(_query,_nom_personne_like); 
END IF; 
IF _type_activite_personne != '' THEN 
    _query := _query || ' AND personne_planning.type_activite = %L '; 
    _query := FORMAT(_query,_type_activite_personne); 
END IF;` 

서버에 의해 반환 된 메시지는 다음과 같습니다 전환 유형 지정자« '»나는 이미 %를 두 배하려고 한 인식 , 그것을 작동하지 않습니다.

답변

1

내가 때문에 가독성에 문자열 연결을 통해 format()을 선호합니다. 함수의 첫 번째 매개 변수로 변수를 사용하지 않도록 규칙을 따른다. 코드는 다음과 같을 수 있습니다 :

_nom_personne_like := 'TEST%'; 
_type_activite_personne := 'SOMETHING'; 
IF _nom_personne_like != '' THEN 
    _query := 
     format(
      '%s AND personne_planning.nom_personne LIKE %L ', 
      _query, 
      _nom_personne_like); 
END IF; 
IF _type_activite_personne != '' THEN 
    _query := 
     format(
      '%s AND personne_planning.type_activite = %L ', 
      _query, 
      _type_activite_personne); 
END IF;` 
+0

내가 || 이상의 쿼리 건설 FORMAT()의 사용을 선호 매력처럼 작동합니다. 감사합니다. – Bidjes

1

당신은 지금처럼 format() 기능에 대해 잊을 수 :

_nom_personne_like := 'TEST%'; 
_type_activite_personne := 'SOMETHING'; 
IF _nom_personne_like != '' THEN 
    _query := _query || ' AND personne_planning.nom_personne LIKE ' || 
       quote_literal(_nom_personne_like); 
END IF; 
IF _type_activite_personne != '' THEN 
    _query := _query || ' AND personne_planning.type_activite = ' || 
       quote_literal(_type_activite_personne); 
END IF; 
관련 문제