2009-04-10 16 views
43

Ich bin mit Postgres und ich versuche, eine Abfrage wie folgt zu schreiben:Postgres - Wie für ein leeres Array überprüfen

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

dh ich möchte wissen, wie viele Zeilen haben ein leeres Array für eine bestimmte Spalte, aber postgres bedeutet das nicht mag:

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

... wenn datasets = NULL für ARRAY [] steht, sind die Antworten OK ... Über "ARRAY []" handelt es sich um einen Syntaxfehler (!): Wie depesz beantwortet hat, benötigt auch ein leeres Array den Datentyp Rory's SQL Script muss korrigiert werden, ist "ARRAY [] :: integer". –

Antwort

60

Die Syntax sollte:

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

Sie verwenden Anführungszeichen und geschweiften Klammern t o Zeige Array-Literale.

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

Obwohl das funktionieren könnte, sieht es nur ein bisschen chaotisch aus. – Rory

14

Sie können die Tatsache nutzen, dass array_upper und Funktionen array_lower, auf leere Arrays null zurück , so können Sie:

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

... ok, wenn datasets = NULL für ARRAY [] steht, und über "ARRAY []" ist es ein Syntaxfehler (!). Wie erstelle ich ein leeres Array? –

+0

Es ist nur ein Fehler, weil es nicht sagen kann, um welchen Datentyp es sich bei dem Array handelt. add cast: wähle ARRAY [] :: int4 []; –

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}