PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak zapytać o długość Django ArrayField?

extra() funkcja została uznana za przestarzałą zgodnie z dokumenty :

Oto jak możesz zrobić to samo za pomocą niestandardowej Adnotacji funkcja:

from django.db import models

class ArrayLength(models.Func):
    function = 'CARDINALITY'

MyModel.objects.all().annotate(field_len=ArrayLength('field')).order_by('field_len')

Pamiętaj, że cardinality() funkcja jest dostępna w PostgreSQL 9.4 lub nowszym. Jeśli używasz starszej wersji, musisz użyć długość_tablicy() :

MyModel.objects.all().annotate(field_len=Func(F('field'), 1, function='array_length')).order_by('field_len')

Jedynym zastrzeżeniem w przypadku tego drugiego zapytania jest to, że pusta tablica zostanie posortowana przed wszystkimi niepustymi. Można to rozwiązać, łącząc NULL wartości z array_length do 0.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sail.js wiele połączeń na starcie

  2. Jak odpytywać postgres o aktualizacje przyrostowe od określonego punktu (sygnatury czasowej lub identyfikatora transakcji)?

  3. Zapytanie natywne JPA zwraca wartość Double lub BigDecimal

  4. PostgreSQL – jak wyeliminować powtarzające się wartości

  5. Czy istnieje odpowiednik Postgresql KAŻDEJ funkcji agregującej w innych RDBMS?