PostgreSQL seleccionando campos vacíos de tipo entero


13

Tengo una tabla y necesito seleccionar todas las filas con un valor vacío para el fk_fc_idcampo (como preludio para eliminarlas),

    Column     |            Type             |                         Modifiers
---------------+-----------------------------+------------------------------------------------------------
 di_timestamp  | timestamp without time zone |
 di_item_value | character varying(10)       |
 fk_fc_id      | integer                     |
 di_id         | integer                     | not null default nextval('data_item_di_id_seq1'::regclass)

Sin embargo esto no funciona,

# select fk_fc_id,di_timestamp,di_item_value from data_item where fk_fc_id="";
ERROR:  zero-length delimited identifier at or near """"
LINE 1: ...di_timestamp,di_item_value from data_item where fk_fc_id="";
                                                                    ^

Intentar Nulltampoco funciona.

Si alguien tiene alguna sugerencia sobre cómo solucionar esto, estaría muy agradecido.


1
seleccione fk_fc_id, di_timestamp, di_item_value de data_item donde fk_fc_id es nulo
foibs

2
Las comillas dobles no se usan para cadenas en PostgreSQL. Las comillas simples se usan para cadenas. ¡Pero no deberías comparar cadenas de longitud cero con enteros! Y comparar valores con el nulluso del =operador siempre devolverá nully hará que se excluya esa fila.
Colin 't Hart

Respuestas:


21

Esto no está realmente relacionado con la administración de la base de datos, ni se trata realmente de PostgreSQL, pero como respondió @foibs, debería echar un vistazo a IS NULL :

 SELECT fk_fc_id,
        di_timestamp,
        di_item_value  
 FROM data_item  
 WHERE fk_fc_id IS NULL

1
Ah, estaba intentando = Nulo en lugar de Nulo. Gracias,
James

Ambos (=; IS) funcionan bien en 9.4
Petr

0

Tienes que usar comillas simples:

SELECT fk_fc_id,
        di_timestamp,
        di_item_value  
 FROM data_item  
 WHERE fk_fc_id=''

Técnicamente, tiene razón, una cadena en SQL debe delimitarse con comillas simples. Sin embargo, en este caso específico, el OP no debe compararse con una cadena (vacía o no) en primer lugar, porque la columna en cuestión se define como integer. Como puede leer en los comentarios debajo de la respuesta aceptada, el OP decidió probar la comparación con una cadena vacía solo porque no habían descubierto cómo comparar correctamente a nulo (que es lo que realmente buscaban).
Andriy M
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.