2009-04-10 3 views
43

Я использую Postgres, и я пытаюсь написать запрос, как это:Postgres - Как проверить пустой массив

select count(*) from table where datasets = ARRAY[] 

т.е. я хочу знать, сколько строк есть пустой массив для некоторые колонки, но Postgres не нравится:

select count(*) from super_eds where datasets = ARRAY[]; 
ERROR: syntax error at or near "]" 
LINE 1: select count(*) from super_eds where datasets = ARRAY[]; 
                  ^
+0

... если datasets = NULL представляет ARRAY [], ответы в порядке ... Примерно о "ARRAY []", это синтаксическая ошибка (!): Как ответил depesz, пустой массив также нужен тип данных, Rory's SQL исправление необходимости скрипта, является «ARRAY [] :: integer». –

ответ

60

синтаксис должен быть:

SELECT 
    COUNT(*) 
FROM 
    table 
WHERE 
    datasets = '{}' 

Вы используете кавычки плюс фигурные скобки т o показать массивные литералы.

0
SELECT COUNT(*) 
FROM table 
WHERE datasets = ARRAY(SELECT 1 WHERE FALSE) 
+0

Хотя это может сработать, это выглядит немного грязно. – Rory

14

Вы можете использовать тот факт, что array_upper и array_lower функции, на пустые массивы возвращают нуль , так что вы можете:

select count(*) from table where array_upper(datasets, 1) is null; 
+0

... ok, если datasets = NULL представляет ARRAY [], но и о «ARRAY []», это синтаксическая ошибка (!). Как создать пустой массив? –

+0

это ошибка только потому, что не может определить, какой тип данных это массив. add cast: выберите ARRAY [] :: int4 []; – 2012-05-09 19:48:31

2
 
Solution Query: 
select * from table where array_column = ARRAY[NULL]::array_datatype; 
 
Example: 

table_emp:

id (int)| name (character varying) | (employee_id) (uuid[]) 
1  | john doe     | {4f1fabcd-aaaa-bbbb-cccc-f701cebfabcd, 2345a3e3-xxxx-yyyy-zzzz-f69d6e2edddd } 
2  | jane doe     | {NULL} 


select * from tab_emp where employee_id = ARRAY[NULL]::uuid[]; 

    ------- 
2  | jane doe     | {NULL} 
Смежные вопросы