Tengo esta consulta

SELECT * FROM "functions" WHERE (models_mask & 1 > 0)

y me sale el siguiente error:

PGError: ERROR: el operador no existe: character varying & entero

SUGERENCIA: No operador coincide con el nombre y tipo de argumento(s). Usted puede ser que necesite para agregar explícita tipo de moldes.

La models_mask es un número entero en la base de datos. Cómo puedo solucionar este problema.

Gracias!

1 Comentario

  1. 12

    Retirar el docs en poco operadores Pg.

    Esencialmente & sólo funciona en dos tipos (generalmente poco o int), por lo que model_mask tendrá que ser CASTed de varchar a algo razonable como poco o int:

    models_mask::int & 1 -omodels_mask::int::bit & b'1'

    Usted puede averiguar qué tipo de un operador que trabaja con el uso de \doS en psql

    pg_catalog | &    | bigint                      | bigint                      | bigint                      | bitwise and
    pg_catalog | &    | bit                         | bit                         | bit                         | bitwise and
    pg_catalog | &    | inet                        | inet                        | inet                        | bitwise and
    pg_catalog | &    | integer                     | integer                     | integer                     | bitwise and
    pg_catalog | &    | smallint                    | smallint                    | smallint                    | bitwise and

    Aquí está un ejemplo rápido para obtener más información

    # SELECT 11 & 15 AS int, b'1011' & b'1111' AS bin INTO foo;
    SELECT
    
    # \d foo
          Table "public.foo"
     Column |  Type   | Modifiers 
    --------+---------+-----------
     int    | integer | 
     bin    | "bit"   | 
    
    # SELECT * FROM foo;
     int | bin  
    -----+------
      11 | 1011
    • Excelente! Gracias por la solución y la explicación.

Dejar respuesta

Please enter your comment!
Please enter your name here