Compartir a través de


Filtrado de datos en REST ($filter)

El filtrado limita los conjuntos de datos de gran tamaño solo a los registros que necesita. En REST, Data API Builder (DAB) admite un parámetro de consulta inspirado en $filter OData. Cada filtro se compila en SQL parametrizado para garantizar la seguridad y la coherencia.

Vista rápida

Operator Meaning
eq igual
ne no igual
gt mayor que
ge mayor o igual
lt menor que
le menor o igual
and AND lógico
or OR lógico
not logical NOT
( ) agrupación

eq

Igual a. Devuelve registros donde el valor de un campo coincide exactamente con el literal proporcionado o null.

En este ejemplo, se obtienen libros en los que el título es igual 'Dune'a , la marca disponible es true, el precio es 20, la fecha publicada es el 1 de enero de 2024 y la clasificación es null.

GET /api/books?$filter=
  title eq 'Dune' and
  available eq true and
  price eq 20 and
  published_on eq 2024-01-01T00:00:00Z and
  rating eq null

Nota:

$filter admite eq null y ne null directamente para comparaciones nulas.

Conceptual SQL

SELECT * FROM Books
WHERE title = 'Dune'
  AND available = 1
  AND price = 20
  AND published_on = '2024-01-01T00:00:00Z'
  AND rating IS NULL;

ne

No es igual a. Devuelve registros en los que el valor de un campo no coincide con el literal especificado o no es null.

En este ejemplo, se obtienen libros en los que el título no 'Foundation'es , la marca disponible no es false, el precio no es cero, la fecha de publicación no es el 31 de diciembre de 2023 y la clasificación no es nula.

GET /api/books?$filter=
  title ne 'Foundation' and
  available ne false and
  price ne 0 and
  published_on ne 2023-12-31T00:00:00Z and
  rating ne null

Nota:

Al filtrar los campos date o datetime, use el formato ISO 8601 UTC sin comprimir (yyyy-MM-ddTHH:mm:ssZ). Los formatos de estilo OData o entre comillas no son válidos.

  • Erróneo: $filter=Date ge '2025-01-01'
  • Erróneo: $filter=Date ge datetime'2025-01-01'
  • Correcto: $filter=Date ge 2025-01-01T00:00:00Z

Conceptual SQL

SELECT * FROM Books
WHERE title <> 'Foundation'
  AND available <> 0
  AND price <> 0
  AND published_on <> '2023-12-31T00:00:00Z'
  AND rating IS NOT NULL;

gt

Mayor que. Devuelve registros en los que el valor de un campo es estrictamente mayor que el literal especificado.

En este ejemplo, estamos obteniendo libros cuyo título se ordena alfabéticamente después 'A'de , la marca disponible es true, el precio es mayor que 10 y la fecha de publicación es posterior al 1 de enero de 2020.

GET /api/books?$filter=
  title gt 'A' and
  available gt false and
  price gt 10 and
  published_on gt 2020-01-01T00:00:00Z

Conceptual SQL

SELECT * FROM Books
WHERE title > 'A'
  AND available > 0
  AND price > 10
  AND published_on > '2020-01-01T00:00:00Z';

ge

Mayor o igual que. Devuelve registros en los que el valor de un campo es mayor o igual que el literal especificado.

En este ejemplo, estamos obteniendo libros cuyo título es 'A' o posterior, la marca disponible es true, el precio es al menos 10 y la fecha de publicación es el 1 de enero de 2020 o después.

GET /api/books?$filter=
  title ge 'A' and
  available ge false and
  price ge 10 and
  published_on ge 2020-01-01T00:00:00Z

Conceptual SQL

SELECT * FROM Books
WHERE title >= 'A'
  AND available >= 0
  AND price >= 10
  AND published_on >= '2020-01-01T00:00:00Z';

lt

Menos que. Devuelve registros en los que el valor de un campo es estrictamente inferior al literal especificado.

En este ejemplo, se obtienen libros cuyo título se ordena antes 'Z'de , la marca disponible es false, el precio es inferior a 50 y la fecha de publicación es anterior al 1 de enero de 2030.

GET /api/books?$filter=
  title lt 'Z' and
  available lt true and
  price lt 50 and
  published_on lt 2030-01-01T00:00:00Z

Conceptual SQL

SELECT * FROM Books
WHERE title < 'Z'
  AND available < 1
  AND price < 50
  AND published_on < '2030-01-01T00:00:00Z';

le

Menor o igual que. Devuelve registros en los que el valor de un campo es menor o igual que el literal especificado.

En este ejemplo, estamos obteniendo libros cuyo título se ordena antes o igual a 'Z', la marca disponible es true, el precio es 100 o menos, y la fecha de publicación es el 1 de enero de 2030.

GET /api/books?$filter=
  title le 'Z' and
  available le true and
  price le 100 and
  published_on le 2030-01-01T00:00:00Z

Conceptual SQL

SELECT * FROM Books
WHERE title <= 'Z'
  AND available <= 1
  AND price <= 100
  AND published_on <= '2030-01-01T00:00:00Z';

and

AND lógico. Combina varias condiciones que deben ser verdaderas para que un registro coincida.

En este ejemplo, se obtienen libros en los que el título es 'Dune', la marca disponible es true, el precio es menor que 50, la fecha de publicación es después del 1 de enero de 2020 y la clasificación es null.

GET /api/books?$filter=
  title eq 'Dune' and
  available eq true and
  price lt 50 and
  published_on ge 2020-01-01T00:00:00Z and
  rating eq null

Conceptual SQL

SELECT * FROM Books
WHERE title = 'Dune'
  AND available = 1
  AND price < 50
  AND published_on >= '2020-01-01T00:00:00Z'
  AND rating IS NULL;

or

OR lógico. Combina condiciones en las que al menos uno debe ser true para que un registro coincida.

En este ejemplo, se obtienen libros en los que el título es 'Dune', o la marca disponible es true, o el precio es mayor que 20, o la fecha de publicación es anterior al 1 de enero de 2025 o la clasificación es null.

GET /api/books?$filter=
  title eq 'Dune' or
  available eq true or
  price gt 20 or
  published_on lt 2025-01-01T00:00:00Z or
  rating eq null

Conceptual SQL

SELECT * FROM Books
WHERE title = 'Dune'
  OR available = 1
  OR price > 20
  OR published_on < '2025-01-01T00:00:00Z'
  OR rating IS NULL;

not

NOT lógico. Niega una condición para que los registros se devuelvan solo si la condición es false.

En este ejemplo, estamos obteniendo todos los libros que no tienen el título 'Romance', no están disponibles, no cuestan menos de $10, no se publicaron antes del 1 de enero de 2020 y no tienen una clasificación nula.

GET /api/books?$filter=
  not (
    title eq 'Romance' and
    available eq false and
    price lt 10 and
    published_on lt 2020-01-01T00:00:00Z and
    rating eq null
  )

Conceptual SQL

SELECT * FROM Books
WHERE NOT (
  title = 'Romance'
  AND available = 0
  AND price < 10
  AND published_on < '2020-01-01T00:00:00Z'
  AND rating IS NULL
);

( ) agrupación

Agrupa subexpresiones para que pueda controlar el orden de evaluación en filtros complejos.

En este ejemplo, se obtienen libros en los que el título es 'Fiction' o 'SciFi', y el libro está disponible o tiene un precio inferior a 25 USD, y la fecha de publicación es después del 1 de enero de 2020 y la clasificación es nula.

GET /api/books?$filter=
  (title eq 'Fiction' or title eq 'SciFi') and
  (available eq true or price lt 25) and
  published_on ge 2020-01-01T00:00:00Z and
  rating eq null

Conceptual SQL

SELECT * FROM Books
WHERE (title = 'Fiction' OR title = 'SciFi')
  AND (available = 1 OR price < 25)
  AND published_on >= '2020-01-01T00:00:00Z'
  AND rating IS NULL;

Ejemplo de configuración

{
  "runtime": {
    "pagination": {
      "default-page-size": 100,
      "max-page-size": 100000
    }
  },
  "entities": {
    "Book": {
      "source": {
        "type": "table",
        "object": "dbo.books"
      },
      "mappings": {
        "sku_title": "title",
        "sku_price": "price"
      },
      "relationships": {
        "book_category": {
          "cardinality": "one",
          "target.entity": "Category",
          "source.fields": [ "category_id" ],
          "target.fields": [ "id" ]
        }
      }
    },
    "Category": {
      "source": {
        "type": "table",
        "object": "dbo.categories"
      },
      "relationships": {
        "category_books": {
          "cardinality": "many",
          "target.entity": "Book",
          "source.fields": [ "id" ],
          "target.fields": [ "category_id" ]
        }
      }
    }
  }
}

Consulte también

Concepto REST GraphQL Propósito
Projection $select items Elección de los campos que se van a devolver
Filtros $filter filtro Restricción de filas por condición
Ordenación $orderby orderBy Definición del criterio de ordenación
Tamaño de página $first primero Limitar el número de elementos por página
Continuación $after después Continuar desde la última página con un cursor

Nota:

Las palabras clave rest comienzan por $, siguiendo las convenciones de OData.