2011-07-09 6 views
2

PostgreSQLテーブル内にtext [] ARRAYカラムがあり、SELECTクエリ内の配列内の各エレメントに対してchar_length()を実行する必要があります通常のSQLでplpgsqlではなく)。したがって、要素のいずれかが25文字を超える場合、SELECTは 't'と 'f'を返します。私はカスタムplpgsql関数内でテキスト[]をループすることができますが、私はSQLでこれを直接行う方法を見つける必要がある他の理由のために知っています。PLPGSQL関数内ではなく、SELECTクエリ内でPostgreSQL配列をループする

それは可能ですか?

答えて

1

、あなたが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」に設定し、結果を崩壊するだけの便利な方法です私は他の方法があると確信しています)。 PostgreSQLの8.4のよう

関連する問題