2016-06-15 22 views
1

我有一個函數,它將一個字符串中的多個參數結合起來,如果它們不爲空或爲空。在特定參數上,我使用LIKE條件的%字符。 我的問題是格式函數,它試圖對它執行轉換,就像它是一個參數。我怎樣才能避免這種情況?如何在字符串中使用%時在PostgreSQL中使用格式化函數?

我有10多個參數和多個LIKE測試。 在下面的第二種格式功能的例子嘗試轉換%的TEST%

_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

我喜歡()查詢施工過||使用的格式它的功能就像魅力一樣,謝謝。 – 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; 
相關問題