2014-04-22 24 views
1

的PostgreSQL 9.2作品有,如何將一個數組提供給一系列參數?

SELECT Format('%s %s!', 'Hello', 'world'); 

但我需要這樣的東西

SELECT Format('%s %s!', array['Hello', 'world']); 

,或者更具體地講,我需要一些convertToArgs

SELECT Format('%s %s!', convertToArgs(array['Hello', 'world'])); 

注:真正的問題是通用的,與任何數量的itens(在數組中兼容佔位符)

SELECT Format(template, convertToArgs(values)); 
+0

沒有Postgres版本「9.X」。引用[官方版本策略](http://www.postgresql.org/support/versioning/):'主要版本通過增加版本號的第一部分或第二部分來編號,例如9.1至9.2.'這種不準確的後果:pozs給出了一個答案(暗示'VARIADIC')適用於9.3,但也適用於9.2或更早... –

+0

好吧,對不起,我看到...編輯問題 –

回答

2

此功能稱爲VARIADIC參數。

你可以叫一個VARIADIC參數與陣列也一樣,如果你在前面加上VARIADIC關鍵字:

SELECT format('%s %s!', VARIADIC ARRAY['Hello', 'world']); 

編輯:如@ErwinBrandstetter指出,這將不會在9.2工作。不是因爲VARIADIC參數調用,也不支持format()。根據文檔concat,concat_wsformat就是不能以這種方式調用(在9.3之前 - 除此之外,pg_get_functiondef也在9.2中報告它也是可變的)。用戶定義的功能也可以在9.2中用這種方式調用

+0

OPS,我投了票,但運行此SELECT時出現錯誤:「幾個參數」錯誤。 –

+0

@彼得它適用於我。你的版本是什麼? –

+0

適用於Postgres 9.3。 VARIADIC調用來自8.4的文檔。 'format()'在9.0的文檔中。你確定你運行了這個確切的查詢嗎? – pozs

0
select format('%s!', array_to_string(array['Hello', 'world'], ' ')); 
    format  
-------------- 
Hello world! 
+0

對不起。在這個例子中解決方法的好理想,但不是解決問題的辦法。我的數據庫使用'format(t,a)'這兩個變量,'a'用可變的'array_length(a,1)'和't'與兼容的佔位符。 –

+0

@Peter你可以使用PL/pgSQL嗎? –

+0

是的,好的(!),是一種替代方案... –

相關問題