代码之家  ›  专栏  ›  技术社区  ›  Chris Bloom

测试Postgresql数组字段是否为null或空的正确方法是什么

  •  5
  • Chris Bloom  · 技术社区  · 11 年前

    我有一个用整数数组字段定义的表。它包含以下数据:

     id | black_list 
    ----+------------
      4 |            
      5 |            
      8 |            
     12 |            
      6 |            
      7 |            
     10 | {5}        
     13 | {5}        
      3 | {}         
      9 | {3}        
     11 | {}         
     14 | {}         
      1 | {}         
      2 | {}         
     15 | {}         
     16 | {}         
     17 | {}         
    (17 rows)
    

    我需要编写一个查询,看看数组字段是否为空——NULL或其他。问题是 {} 值不为null,也不从ARRAY_length函数返回任何长度。中没有列出其他数组函数 http://www.postgresql.org/docs/8.4/static/functions-array.html 似乎也正是我所需要的。我发现我可以写作 ARRAY_LENGTH(0 || black_list) 让它们都返回1或更多的长度,但这似乎是一个糟糕的破解。测试这个的正确方法是什么?

    奖金问题:具体是什么 {} 的代表?我无法编写将返回该值的select语句。 ARRAY[] 抛出错误, ARRAY[""] 退货 {""} , ARRAY[NULL] 退货 {NULL}

    1 回复  |  直到 11 年前
        1
  •  6
  •   Aaron Miller    11 年前

    {} 似乎表示一个空数组,这可以解释 NOT NULL ARRAY_LENGTH({}) 没有返回任何内容,但我希望它在返回0 {} ,也许这是我不熟悉的PostgreSQL的一个特点。

    有什么原因不能只测试的返回值吗 ARRAY_LENGTH ,例如。

    SELECT id FROM table WHERE ARRAY_LENGTH(black_list, 1) IS NULL OR ARRAY_LENGTH(black_list, 1) < 1
    

    假设 ARRAY_LENGTH() 不会忘记空值,比如 id=12 在上面的例子中,似乎这样就可以了。