2011-07-09 87 views
2

我在PostgreSQL表中有一個text [] ARRAY列,我需要在SELECT查詢中的數組內的每個元素上運行char_length()(正常的SQL,而不是plpgsql),以便如果任何元素的長度超過25個字符,則SELECT返回't'和'f'。我知道我可以遍歷自定義plpgsql函數中的文本[],但由於其他原因,我需要找到一種方法在SQL中直接執行此操作。在SELECT查詢中循環PostgreSQL數組,而不是在PLPGSQL函數中

可能嗎?

回答

1

了PostgreSQL 8.4,你可以使用UNNEST功能:

SELECT MAX((char_length(string) > 25)::INT)::BOOLEAN 
FROM (
    SELECT my_array,UNNEST(my_array) AS string 
    FROM my_table 
) AS x 
GROUP BY my_array; 
+0

哦,對了,我還以爲這就是OP想要的東西,但仔細檢查,這不是...應答更新。謝謝。 – Flimzy

2

你可以使用unnest破開數組,然後一些簡單lengthexists東西:

select exists(
    select 1 
    from (
     select unnest(ar) as x 
     from table_name 
    ) as t 
    where length(x) > 25 
) 

existsselect 1企業只是崩潰的結果設置爲一個布爾一種方便的方式(I」我確定有其他方法)。

相關問題