>

어레이 선택 [1,2,3]-ARRAY [5, NULL, 6]

PostgreSQL 8.4에서 배열 작업에 contrib _int.sql 패키지를 사용하고 있습니다 위의 쿼리에는 NULL 가 있습니다.  오른쪽 배열에서. 이 NULL 값으로 인해 오류가 발생합니다.

"ERROR:  array must not contain nulls"

누구든지 배열에서 null 값을 제거하도록 도와 줄 수 있습니까?

  • 답변 # 1

    1)어레이는PostgreSQL 8.4 +에 NULL 값을 포함 할 수 있습니다

    .

    db=# SELECT ARRAY[5,NULL,6];
       array
    ------------
     {5,NULL,6}
    
    

    2) 그러나 표준 PostgreSQL 8.4에서다른 ARRAY에서 하나의 ARRAY를 뺄 수는 없습니다.

    db=# SELECT ARRAY[1,2,3] - ARRAY[5,NULL,6];
    ERROR:  operator does not exist: integer[] - integer[]
    
    

    3) contrib 패키지 intarray가 설치된 PostgreSQL 8.4에서할 수 있습니다.

    4) 그러나 NULL 값을 포함하는 배열을감산할 수 없습니다.

    5)루비에서할 수있습니다. 설명서 또는 여기 SO를 참조하십시오.

    <시간> PostgreSQL의 정수 배열에서 NULL을 대체하는 솔루션 :

    Postgres9.3이상에는 array_replace(anyarray, NULL, anyelement) 모든배열의 경우매뉴얼입니다.

    이전 버전 :

    CREATE OR REPLACE FUNCTION f_int_array_replace_null (int[], int)
    RETURNS int[] AS
    $$
    SELECT ARRAY (
        SELECT COALESCE(x, $2)
        FROM   unnest($1) x);
    $$ LANGUAGE SQL IMMUTABLE;
    
    

    unnest()  PostgreSQL8.4
    이전 버전의 경우 generate_series() 를 사용할 수 있습니다 :

    CREATE OR REPLACE FUNCTION f_int_array_replace_null (int[], int)
    RETURNS int[] AS
    $$
    SELECT ARRAY (
        SELECT COALESCE($1[i], $2)
        FROM   generate_series(1, array_upper($1, 1)) x(i));
    $$ LANGUAGE SQL IMMUTABLE;
    
    

    전화 :

    event=# SELECT f_int_array_replace_null (ARRAY[5,NULL,6], 0);
     f_int_array_replace_null
    --------------------------
     {5,0,6}
    
    

    면책 조항: 두 버전 모두 다차원 배열에 적합하지 않습니다.

관련 자료

  • 이전 asp.net - responseMode ="ExecuteURL"을 통해 HttpContextCurrentItems가 지워졌습니까?
  • 다음 c++ - cuda에서 템플릿 상수 변수 정의