2013-12-09 53 views
0

我有我的存儲過程中號的VARCHAR,這些數字被組織爲數組,我將展示下面的例子:從VARCHAR選擇串並轉換爲整數數組

{1,2,3,4,5,6,7,8,9},{1,2,3,4,5},{1,2,3},{9} -- This is a STRING 

我希望做一個FOR循環,每次從{}之間選擇一個子串,並將其轉換爲整數數組。

因此,在第一次我的循環裏,我將有:

{1,2,3,4,5,6,7,8,9} 

所以我會用array_to_string將其轉換爲一個integer[]

在我第二次將有:

{1,2,3,4,5} 

並繼續使用array_to_string

任何提示?小心點,因爲不幸的是我使用的是PostgreSQL 8.3!

回答

1

可以做一個單獨的語句:

SELECT string_to_array(unnest(string_to_array(
      trim('{1,2,3,4,5,6,7,8,9},{1,2,3,4,5},{1,2,3},{9}', '{}') 
      , '},{')), ',')::int[] 

..在Postgres的8.4或更高版本。 8.3 has reached EOL.緊急考慮升級。

然而,在8.3已經regexp_split_to_table()

SELECT string_to_array(regexp_split_to_table(
      trim('{1,2,3,4,5,6,7,8,9},{1,2,3,4,5},{1,2,3},{9}', '{}') 
      , '},{'), ',')::int[] 

-> SQLfiddle demo for Postgres 8.3.

對於循環數組,認爲這是相關答案:
Postgres - array for loop

+0

你的解決方案是如此優雅!但在此之後,我需要迭代每個數組中的每個元素,以將該數字傳遞給另一個過程,如第一個數組中,我將調用我的過程9次:my_proc(1); MY_PROC(2); MY_PROC(3);並繼續... – ricardocaldeira

+0

@ricardocaldeira:轉換數據後仍然可以這樣做。我想一個嵌套for循環。我在現代和古代的Postgres中添加了一個循環數組的鏈接。 –

+0

Man我正在嘗試,但我不知道如何得到這個...如果你能幫助我,請回答其他問題http://stackoverflow.com/問題/ 20480035 /迭代-上每個元件從 - 一個陣列-的陣列上,PostgreSQL的 – ricardocaldeira