{"title":"Fonctions de base de données","version":"2.0","locale":"fr","docname":"ref/models/database-functions","url":"/fr/2.0/ref/models/database-functions/","canonical":"https://djangodocs.dev/fr/2.0/ref/models/database-functions/","summary":"Les classes documentées ci-dessous permettent d’exploiter dans Django les fonctions fournies par la base de données sous-jacente telles que les annotations…","html":"<span id=\"database-functions\"></span><h1>Fonctions de base de données<a class=\"heading-anchor\" href=\"#module-django.db.models.functions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Les classes documentées ci-dessous permettent d’exploiter dans Django les fonctions fournies par la base de données sous-jacente telles que les annotations, les agrégations ou les filtres. Les fonctions sont également des <a class=\"reference internal\" href=\"/fr/2.0/ref/models/expressions/\"><span class=\"doc\">expressions</span></a>, elles peuvent donc être utilisées et combinées avec d’autres expressions comme les <a class=\"reference internal\" href=\"/fr/2.0/ref/models/querysets/#aggregation-functions\"><span class=\"std std-ref\">fonctions d’agrégation</span></a>.</p>\n<p>Nous allons utiliser le modèle suivant dans les exemples de chaque fonction :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Author</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    age <span class=\"o\">=</span> models<span class=\"o\">.</span>PositiveIntegerField<span class=\"p\">(</span>null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    alias <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">,</span> null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    goes_by <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">,</span> null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Nous ne recommandons généralement pas de définir <code class=\"docutils literal notranslate\">null=True</code> pour les champs <code class=\"docutils literal notranslate\">CharField</code> car cela permet au champ de posséder deux valeurs « vides » différentes, mais nous l’utilisons ici pour l’exemple <code class=\"docutils literal notranslate\">Coalesce</code> ci-dessous.</p>\n<section id=\"comparison-and-conversion-functions\">\n<span id=\"comparison-functions\"></span><h2>Fonctions de comparaison et de conversion<a class=\"heading-anchor\" href=\"#comparison-and-conversion-functions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"cast\">\n<h3><code class=\"docutils literal notranslate\">Cast</code><a class=\"heading-anchor\" href=\"#cast\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Cast\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Cast</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Cast\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Force le type de résultat de <code class=\"docutils literal notranslate\">expression</code> à celui de <code class=\"docutils literal notranslate\">output_field</code>.</p>\n<p>Exemple d’utilisation :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> FloatField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Cast\n<span class=\"gp\">&gt;&gt;&gt; </span>Value<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>integer<span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>value <span class=\"o\">=</span> Value<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>as_float<span class=\"o\">=</span>Cast<span class=\"p\">(</span><span class=\"s1\">&#39;integer&#39;</span><span class=\"p\">,</span> FloatField<span class=\"p\">()))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>value<span class=\"o\">.</span>as_float<span class=\"p\">)</span>\n<span class=\"go\">4.0</span>\n</code></pre></div>\n</section>\n<section id=\"coalesce\">\n<h3><code class=\"docutils literal notranslate\">Coalesce</code><a class=\"heading-anchor\" href=\"#coalesce\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Coalesce\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Coalesce</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Coalesce\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte une liste d’au moins deux noms de champ ou expressions et renvoie la première valeur non nulle (notez qu’une chaîne vide n’est pas considérée comme une valeur nulle). Chaque paramètre doit être d’un type similaire ; si vous mélangez des textes et des nombres, la base de données produira une erreur.</p>\n<p>Exemples d’utilisation :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get a screen name from least to most public</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Sum<span class=\"p\">,</span> Value <span class=\"k\">as</span> V\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Coalesce\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">,</span> goes_by<span class=\"o\">=</span><span class=\"s1\">&#39;Maggie&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   screen_name<span class=\"o\">=</span>Coalesce<span class=\"p\">(</span><span class=\"s1\">&#39;alias&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;goes_by&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;name&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>screen_name<span class=\"p\">)</span>\n<span class=\"go\">Maggie</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Prevent an aggregate Sum() from returning None</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>aggregated <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>aggregate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   combined_age<span class=\"o\">=</span>Coalesce<span class=\"p\">(</span>Sum<span class=\"p\">(</span><span class=\"s1\">&#39;age&#39;</span><span class=\"p\">),</span> V<span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>   combined_age_default<span class=\"o\">=</span>Sum<span class=\"p\">(</span><span class=\"s1\">&#39;age&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>aggregated<span class=\"p\">[</span><span class=\"s1\">&#39;combined_age&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">0</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>aggregated<span class=\"p\">[</span><span class=\"s1\">&#39;combined_age_default&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">None</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avertissement</p>\n<p>Avec MySQL, il est possible qu’une valeur Python transmise à <code class=\"docutils literal notranslate\">Coalesce</code> soit convertie en un type incorrect, sauf dans le cas où le bon type de base de données est explicitement forcé :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> DateTimeField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Cast<span class=\"p\">,</span> Coalesce\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"gp\">&gt;&gt;&gt; </span>now <span class=\"o\">=</span> timezone<span class=\"o\">.</span>now<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Coalesce<span class=\"p\">(</span><span class=\"s1\">&#39;updated&#39;</span><span class=\"p\">,</span> Cast<span class=\"p\">(</span>now<span class=\"p\">,</span> DateTimeField<span class=\"p\">()))</span>\n</code></pre></div>\n</aside>\n</section>\n<section id=\"greatest\">\n<h3><code class=\"docutils literal notranslate\">Greatest</code><a class=\"heading-anchor\" href=\"#greatest\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Greatest\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Greatest</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Greatest\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte une liste d’au moins deux noms de champ ou expressions et renvoie la plus grande valeur. Chaque paramètre doit être d’un type similaire ; si vous mélangez des textes et des nombres, la base de données produira une erreur.</p>\n<p>Exemple d’utilisation :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Blog</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    body <span class=\"o\">=</span> models<span class=\"o\">.</span>TextField<span class=\"p\">()</span>\n    modified <span class=\"o\">=</span> models<span class=\"o\">.</span>DateTimeField<span class=\"p\">(</span>auto_now<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Comment</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    body <span class=\"o\">=</span> models<span class=\"o\">.</span>TextField<span class=\"p\">()</span>\n    modified <span class=\"o\">=</span> models<span class=\"o\">.</span>DateTimeField<span class=\"p\">(</span>auto_now<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    blog <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Blog<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Greatest\n<span class=\"o\">&gt;&gt;&gt;</span> blog <span class=\"o\">=</span> Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>body<span class=\"o\">=</span><span class=\"s1\">&#39;Greatest is the best.&#39;</span><span class=\"p\">)</span>\n<span class=\"o\">&gt;&gt;&gt;</span> comment <span class=\"o\">=</span> Comment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>body<span class=\"o\">=</span><span class=\"s1\">&#39;No, Least is better.&#39;</span><span class=\"p\">,</span> blog<span class=\"o\">=</span>blog<span class=\"p\">)</span>\n<span class=\"o\">&gt;&gt;&gt;</span> comments <span class=\"o\">=</span> Comment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>last_updated<span class=\"o\">=</span>Greatest<span class=\"p\">(</span><span class=\"s1\">&#39;modified&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;blog__modified&#39;</span><span class=\"p\">))</span>\n<span class=\"o\">&gt;&gt;&gt;</span> annotated_comment <span class=\"o\">=</span> comments<span class=\"o\">.</span>get<span class=\"p\">()</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">annotated_comment.last_updated</code> sera la valeur la plus récente entre <code class=\"docutils literal notranslate\">blog.modified</code> et <code class=\"docutils literal notranslate\">comment.modified</code>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avertissement</p>\n<p>Le comportement de <code class=\"docutils literal notranslate\">Greatest</code> varie entre les bases de données lorsqu’une ou plusieurs des expressions ont la valeur <code class=\"docutils literal notranslate\">null</code>:</p>\n<ul class=\"simple\">\n<li><p>PostgreSQL : <code class=\"docutils literal notranslate\">Greatest</code> renvoie l’expression non nulle la plus grande, ou <code class=\"docutils literal notranslate\">null</code> si toutes les expressions valent <code class=\"docutils literal notranslate\">null</code>.</p></li>\n<li><p>SQLite, Oracle et MySQL : si l’une des expressions vaut <code class=\"docutils literal notranslate\">null</code>, <code class=\"docutils literal notranslate\">Greatest</code> renvoie <code class=\"docutils literal notranslate\">null</code>.</p></li>\n</ul>\n<p>Le comportement de PostgreSQL peut être émulé à l’aide de <code class=\"docutils literal notranslate\">Coalesce</code> si vous avez une valeur minimum adéquate à fournir comme valeur par défaut.</p>\n</aside>\n</section>\n<section id=\"least\">\n<h3><code class=\"docutils literal notranslate\">Least</code><a class=\"heading-anchor\" href=\"#least\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Least\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Least</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Least\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte une liste d’au moins deux noms de champ ou expressions et renvoie la plus petite valeur. Chaque paramètre doit être d’un type similaire ; si vous mélangez des textes et des nombres, la base de données produira une erreur.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avertissement</p>\n<p>Le comportement de <code class=\"docutils literal notranslate\">Least</code> varie entre les bases de données lorsqu’une ou plusieurs des expressions ont la valeur <code class=\"docutils literal notranslate\">null</code>:</p>\n<ul class=\"simple\">\n<li><p>PostgreSQL : <code class=\"docutils literal notranslate\">Least</code> renvoie l’expression non nulle la plus petite, ou <code class=\"docutils literal notranslate\">null</code> si toutes les expressions valent <code class=\"docutils literal notranslate\">null</code>.</p></li>\n<li><p>SQLite, Oracle et MySQL : si l’une des expressions vaut <code class=\"docutils literal notranslate\">null</code>, <code class=\"docutils literal notranslate\">Least</code> renvoie <code class=\"docutils literal notranslate\">null</code>.</p></li>\n</ul>\n<p>Le comportement de PostgreSQL peut être émulé à l’aide de <code class=\"docutils literal notranslate\">Coalesce</code> si vous avez une valeur maximum adéquate à fournir comme valeur par défaut.</p>\n</aside>\n</section>\n</section>\n<section id=\"date-functions\">\n<span id=\"id1\"></span><h2>Fonctions de date<a class=\"heading-anchor\" href=\"#date-functions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Nous allons utiliser le modèle suivant dans les exemples de chaque fonction :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Experiment</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    start_datetime <span class=\"o\">=</span> models<span class=\"o\">.</span>DateTimeField<span class=\"p\">()</span>\n    start_date <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">(</span>null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    start_time <span class=\"o\">=</span> models<span class=\"o\">.</span>TimeField<span class=\"p\">(</span>null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    end_datetime <span class=\"o\">=</span> models<span class=\"o\">.</span>DateTimeField<span class=\"p\">(</span>null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    end_date <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">(</span>null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    end_time <span class=\"o\">=</span> models<span class=\"o\">.</span>TimeField<span class=\"p\">(</span>null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<section id=\"extract\">\n<h3><code class=\"docutils literal notranslate\">Extract</code><a class=\"heading-anchor\" href=\"#extract\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Extract\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Extract</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">lookup_name<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Extract\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Extrait un composant de date sous forme de nombre.</p>\n<p>Accepte une <code class=\"docutils literal notranslate\">expression</code> représentant un champ <code class=\"docutils literal notranslate\">DateField</code>, <code class=\"docutils literal notranslate\">DateTimeField</code>, <code class=\"docutils literal notranslate\">TimeField</code> ou <code class=\"docutils literal notranslate\">DurationField</code> ainsi qu’un nom d’expression <code class=\"docutils literal notranslate\">lookup_name</code>, et renvoie la partie de date référencée par <code class=\"docutils literal notranslate\">lookup_name</code> sous forme de champ <code class=\"docutils literal notranslate\">IntegerField</code>. Django utilise habituellement la fonction d’extraction des bases de données, il est donc possible d’utiliser n’importe quel nom <code class=\"docutils literal notranslate\">lookup_name</code> pris en charge par la base de données en cours. Il est possible de passer aussi une sous-classe de <code class=\"docutils literal notranslate\">tzinfo</code>, habituellement fournie par <code class=\"docutils literal notranslate\">pytz</code>, pour extraire une valeur dans un fuseau horaire spécifique.</p>\n<aside class=\"version-note version-changed\" data-version=\"2.0\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 2.0</p><p>La prise en charge de <code class=\"docutils literal notranslate\">DurationField</code> a été ajoutée.</p>\n</aside>\n<p>Étant donnée la date/heure <code class=\"docutils literal notranslate\">2015-06-15 23:30:01.000321+00:00</code>, les valeurs <code class=\"docutils literal notranslate\">lookup_name</code> possibles renvoient :</p>\n<ul class=\"simple\">\n<li><p>« year » (année) : 2015</p></li>\n<li><p>« quarter »: 2</p></li>\n<li><p>« month » (mois) : 6</p></li>\n<li><p>« day » (jour) : 15</p></li>\n<li><p>« week »: 25</p></li>\n<li><p>« week_day » (jour de semaine) : 2</p></li>\n<li><p>« hour » (heure) : 23</p></li>\n<li><p>« minute »: 30</p></li>\n<li><p>« second »: 1</p></li>\n</ul>\n<p>Si un fuseau horaire différent comme <code class=\"docutils literal notranslate\">Australia/Melbourne</code> est actif dans Django, la date/heure est convertie dans le fuseau avant que la valeur soit extraite. Le décalage horaire de Melbourne dans la date d’exemple ci-dessus est +10:00. Les valeurs renvoyées lorsque ce fuseau est actif seront les mêmes que ci-dessus, à l’exception de :</p>\n<ul class=\"simple\">\n<li><p>« day »: 16</p></li>\n<li><p>« week_day »: 3</p></li>\n<li><p>« hour »: 9</p></li>\n</ul>\n<aside class=\"admonition-week-day-values admonition\" role=\"note\">\n<p class=\"admonition-title\">Valeurs <code class=\"docutils literal notranslate\">week_day</code></p>\n<p>L’extraction <code class=\"docutils literal notranslate\">week_day</code> est calculée différemment de la plupart des bases de données et des fonctions Python standards. Cette fonction renvoie <code class=\"docutils literal notranslate\">1</code> pour dimanche, <code class=\"docutils literal notranslate\">2</code> pour lundi, jusqu’à <code class=\"docutils literal notranslate\">7</code> pour samedi.</p>\n<p>Le calcul équivalent en Python est :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> datetime\n<span class=\"gp\">&gt;&gt;&gt; </span>dt <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"p\">(</span>dt<span class=\"o\">.</span>isoweekday<span class=\"p\">()</span> <span class=\"o\">%</span> <span class=\"mi\">7</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n<span class=\"go\">2</span>\n</code></pre></div>\n</aside>\n<aside class=\"admonition-week-values admonition\" role=\"note\">\n<p class=\"admonition-title\">Valeurs <code class=\"docutils literal notranslate\">week</code></p>\n<p>The <code class=\"docutils literal notranslate\">week</code> <code class=\"docutils literal notranslate\">lookup_type</code> is calculated based on <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/ISO-8601\">ISO-8601</a>, i.e.,\na week starts on a Monday. The first week of a year is the one that\ncontains the year’s first Thursday, i.e. the first week has the majority\n(four or more) of its days in the year. The value returned is in the range\n1 to 52 or 53.</p>\n</aside>\n<p>Chaque valeur <code class=\"docutils literal notranslate\">lookup_name</code> ci-dessus possède une sous-classe de <code class=\"docutils literal notranslate\">Extract</code> correspondante (énumérées ci-dessous) qui devrait être utilisée au lieu de l’équivalent plus bavard, c’est-à-dire <code class=\"docutils literal notranslate\">ExtractYear(...)</code> au lieu de <code class=\"docutils literal notranslate\">Extract(..., lookup_name='year')</code>.</p>\n<p>Exemple d’utilisation :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> datetime\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Extract\n<span class=\"gp\">&gt;&gt;&gt; </span>start <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>end <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   start_datetime<span class=\"o\">=</span>start<span class=\"p\">,</span> start_date<span class=\"o\">=</span>start<span class=\"o\">.</span>date<span class=\"p\">(),</span>\n<span class=\"gp\">... </span>   end_datetime<span class=\"o\">=</span>end<span class=\"p\">,</span> end_date<span class=\"o\">=</span>end<span class=\"o\">.</span>date<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Add the experiment start year as a field in the QuerySet.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>experiment <span class=\"o\">=</span> Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   start_year<span class=\"o\">=</span>Extract<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;year&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>experiment<span class=\"o\">.</span>start_year\n<span class=\"go\">2015</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># How many experiments completed in the same year in which they started?</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   start_datetime__year<span class=\"o\">=</span>Extract<span class=\"p\">(</span><span class=\"s1\">&#39;end_datetime&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;year&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>count<span class=\"p\">()</span>\n<span class=\"go\">1</span>\n</code></pre></div>\n<section id=\"datefield-extracts\">\n<h4>Extractions <code class=\"docutils literal notranslate\">DateField</code><a class=\"heading-anchor\" href=\"#datefield-extracts\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractYear\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractYear</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractYear\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'year'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractMonth\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractMonth</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractMonth\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'month'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractDay\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractDay</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractDay\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'day'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractWeekDay\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractWeekDay</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractWeekDay\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'week_day'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractWeek\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractWeek</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractWeek\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">New in Django 1.11</p></aside>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'week'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractQuarter\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractQuarter</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractQuarter\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"2.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.0</p></aside>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'quarter'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<p>Il s’agit d’équivalents logiques à <code class=\"docutils literal notranslate\">Extract('champ_date', lookup_name)</code>. Chaque classe est aussi une classe <code class=\"docutils literal notranslate\">Transform</code> inscrite pour les champs <code class=\"docutils literal notranslate\">DateField</code> et <code class=\"docutils literal notranslate\">DateTimeField</code> comme <code class=\"docutils literal notranslate\">__(lookup_name)</code>, par ex. <code class=\"docutils literal notranslate\">__year</code>.</p>\n<p>Comme les champs <code class=\"docutils literal notranslate\">DateField</code> n’ont pas de composant d’heure, seules les sous-classes de <code class=\"docutils literal notranslate\">Extract</code> qui s’appliquent aux parties de date peuvent être utilisées avec <code class=\"docutils literal notranslate\">DateField</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> datetime\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> <span class=\"p\">(</span>\n<span class=\"gp\">... </span>    ExtractDay<span class=\"p\">,</span> ExtractMonth<span class=\"p\">,</span> ExtractQuarter<span class=\"p\">,</span> ExtractWeek<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    ExtractWeekDay<span class=\"p\">,</span> ExtractYear<span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>start_2015 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">23</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>end_2015 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"mi\">13</span><span class=\"p\">,</span> <span class=\"mi\">11</span><span class=\"p\">,</span> <span class=\"mi\">27</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   start_datetime<span class=\"o\">=</span>start_2015<span class=\"p\">,</span> start_date<span class=\"o\">=</span>start_2015<span class=\"o\">.</span>date<span class=\"p\">(),</span>\n<span class=\"gp\">... </span>   end_datetime<span class=\"o\">=</span>end_2015<span class=\"p\">,</span> end_date<span class=\"o\">=</span>end_2015<span class=\"o\">.</span>date<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    year<span class=\"o\">=</span>ExtractYear<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    quarter<span class=\"o\">=</span>ExtractQuarter<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    month<span class=\"o\">=</span>ExtractMonth<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    week<span class=\"o\">=</span>ExtractWeek<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    day<span class=\"o\">=</span>ExtractDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    weekday<span class=\"o\">=</span>ExtractWeekDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;year&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;quarter&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;month&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;week&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;day&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;weekday&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>get<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    end_date__year<span class=\"o\">=</span>ExtractYear<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">{&#39;year&#39;: 2015, &#39;quarter&#39;: 2, &#39;month&#39;: 6, &#39;week&#39;: 25, &#39;day&#39;: 15, &#39;weekday&#39;: 2}</span>\n</code></pre></div>\n</section>\n<section id=\"datetimefield-extracts\">\n<h4>Extractions <code class=\"docutils literal notranslate\">DateTimeField</code><a class=\"heading-anchor\" href=\"#datetimefield-extracts\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>En plus de ce qui suit, toutes les extractions pour <code class=\"docutils literal notranslate\">DateField</code> énumérées ci-dessus peuvent aussi être utilisées pour <code class=\"docutils literal notranslate\">DateTimeField</code>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractHour\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractHour</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractHour\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'hour'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractMinute\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractMinute</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractMinute\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'minute'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.ExtractSecond\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ExtractSecond</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.ExtractSecond\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'second'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<p>Il s’agit d’équivalents logiques à <code class=\"docutils literal notranslate\">Extract('champ_datetime', lookup_name)</code>. Chaque classe est aussi une classe <code class=\"docutils literal notranslate\">Transform</code> inscrite pour le champ <code class=\"docutils literal notranslate\">DateTimeField</code> comme <code class=\"docutils literal notranslate\">__(lookup_name)</code>, par ex. <code class=\"docutils literal notranslate\">__minute</code>.</p>\n<p>Exemples <code class=\"docutils literal notranslate\">DateTimeField</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> datetime\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> <span class=\"p\">(</span>\n<span class=\"gp\">... </span>    ExtractDay<span class=\"p\">,</span> ExtractHour<span class=\"p\">,</span> ExtractMinute<span class=\"p\">,</span> ExtractMonth<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    ExtractQuarter<span class=\"p\">,</span> ExtractSecond<span class=\"p\">,</span> ExtractWeek<span class=\"p\">,</span> ExtractWeekDay<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    ExtractYear<span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>start_2015 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">23</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>end_2015 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"mi\">13</span><span class=\"p\">,</span> <span class=\"mi\">11</span><span class=\"p\">,</span> <span class=\"mi\">27</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   start_datetime<span class=\"o\">=</span>start_2015<span class=\"p\">,</span> start_date<span class=\"o\">=</span>start_2015<span class=\"o\">.</span>date<span class=\"p\">(),</span>\n<span class=\"gp\">... </span>   end_datetime<span class=\"o\">=</span>end_2015<span class=\"p\">,</span> end_date<span class=\"o\">=</span>end_2015<span class=\"o\">.</span>date<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    year<span class=\"o\">=</span>ExtractYear<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    quarter<span class=\"o\">=</span>ExtractQuarter<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    month<span class=\"o\">=</span>ExtractMonth<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    week<span class=\"o\">=</span>ExtractWeek<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    day<span class=\"o\">=</span>ExtractDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    weekday<span class=\"o\">=</span>ExtractWeekDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    hour<span class=\"o\">=</span>ExtractHour<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    minute<span class=\"o\">=</span>ExtractMinute<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    second<span class=\"o\">=</span>ExtractSecond<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"s1\">&#39;year&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;month&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;week&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;day&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;weekday&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;hour&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;minute&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;second&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>get<span class=\"p\">(</span>end_datetime__year<span class=\"o\">=</span>ExtractYear<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;year&#39;: 2015, &#39;quarter&#39;: 2, &#39;month&#39;: 6, &#39;week&#39;: 25, &#39;day&#39;: 15, &#39;weekday&#39;: 2,</span>\n<span class=\"go\"> &#39;hour&#39;: 23, &#39;minute&#39;: 30, &#39;second&#39;: 1}</span>\n</code></pre></div>\n<p>Lorsque <a class=\"reference internal\" href=\"/fr/2.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\">USE_TZ</code></a> vaut <code class=\"docutils literal notranslate\">True</code>, les dates/heures sont stockées en UTC dans la base de données. Si un autre fuseau horaire est actif dans Django, la date/heure est convertie dans ce fuseau avant que la valeur soit extraite. L’exemple ci-dessous convertit dans le fuseau horaire de Melbourne (UTC +10:00), ce qui modifie les valeurs du jour, du jour de la semaine et de l’heure qui sont renvoyées :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span> <span class=\"nn\">pytz</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>melb <span class=\"o\">=</span> pytz<span class=\"o\">.</span>timezone<span class=\"p\">(</span><span class=\"s1\">&#39;Australia/Melbourne&#39;</span><span class=\"p\">)</span>  <span class=\"c1\"># UTC+10:00</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">with</span> timezone<span class=\"o\">.</span>override<span class=\"p\">(</span>melb<span class=\"p\">):</span>\n<span class=\"gp\">... </span>   Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>       day<span class=\"o\">=</span>ExtractDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>       weekday<span class=\"o\">=</span>ExtractWeekDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>       hour<span class=\"o\">=</span>ExtractHour<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>   <span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;day&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;weekday&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;hour&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>get<span class=\"p\">(</span>\n<span class=\"gp\">... </span>       end_datetime__year<span class=\"o\">=</span>ExtractYear<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>   <span class=\"p\">)</span>\n<span class=\"go\">{&#39;day&#39;: 16, &#39;weekday&#39;: 3, &#39;hour&#39;: 9}</span>\n</code></pre></div>\n<p>Le passage explicite du fuseau horaire à la fonction <code class=\"docutils literal notranslate\">Extract</code> fonctionne de la même manière et prend la priorité sur le fuseau horaire actif :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span> <span class=\"nn\">pytz</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>melb <span class=\"o\">=</span> pytz<span class=\"o\">.</span>timezone<span class=\"p\">(</span><span class=\"s1\">&#39;Australia/Melbourne&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    day<span class=\"o\">=</span>ExtractDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>melb<span class=\"p\">),</span>\n<span class=\"gp\">... </span>    weekday<span class=\"o\">=</span>ExtractWeekDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>melb<span class=\"p\">),</span>\n<span class=\"gp\">... </span>    hour<span class=\"o\">=</span>ExtractHour<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>melb<span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;day&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;weekday&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;hour&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>get<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    end_datetime__year<span class=\"o\">=</span>ExtractYear<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">{&#39;day&#39;: 16, &#39;weekday&#39;: 3, &#39;hour&#39;: 9}</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"now\">\n<h3><code class=\"docutils literal notranslate\">Now</code><a class=\"heading-anchor\" href=\"#now\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Now\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Now</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Now\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie la date et l’heure courante du serveur de base de données au moment où la requête est exécutée, typiquement en utilisant le code SQL <code class=\"docutils literal notranslate\">CURRENT_TIMESTAMP</code>.</p>\n<p>Exemple d’utilisation :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Now\n<span class=\"gp\">&gt;&gt;&gt; </span>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>published__lte<span class=\"o\">=</span>Now<span class=\"p\">())</span>\n<span class=\"go\">&lt;QuerySet [&lt;Article: How to Django&gt;]&gt;</span>\n</code></pre></div>\n<aside class=\"admonition-postgresql-considerations admonition\" role=\"note\">\n<p class=\"admonition-title\">Considérations sur PostgreSQL</p>\n<p>Avec PostgreSQL, l’instruction <code class=\"docutils literal notranslate\">CURRENT_TIMESTAMP</code> renvoie l’heure du début de la transaction actuelle. Par conséquent, pour garantir la compatibilité entre bases de données, <code class=\"docutils literal notranslate\">Now()</code> utilise <code class=\"docutils literal notranslate\">STATEMENT_TIMESTAMP</code> à la place. Si vous avez besoin de l’horodatage de la transaction, utilisez <a class=\"reference internal\" href=\"/fr/2.0/ref/contrib/postgres/functions/#django.contrib.postgres.functions.TransactionNow\" title=\"django.contrib.postgres.functions.TransactionNow\"><code class=\"xref py py-class docutils literal notranslate\">django.contrib.postgres.functions.TransactionNow</code></a>.</p>\n</aside>\n</section>\n<section id=\"trunc\">\n<h3><code class=\"docutils literal notranslate\">Trunc</code><a class=\"heading-anchor\" href=\"#trunc\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Trunc\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Trunc</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">kind</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Trunc\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Tronque une date jusqu’à un composant significatif.</p>\n<p>Lorsque vous ne voulez que savoir si quelque chose s’est produit durant une année, une heure ou un jour particulier, mais pas à quelle  seconde, <code class=\"docutils literal notranslate\">Trunc</code> (et ses sous-classes) peut être utile pour filtrer ou agréger vos données. Par exemple, vous pouvez utiliser <code class=\"docutils literal notranslate\">Trunc</code> pour calculer le nombre de ventes par jour.</p>\n<p><code class=\"docutils literal notranslate\">Trunc</code> accepte une seule <code class=\"docutils literal notranslate\">expression</code>, représentant un champ <code class=\"docutils literal notranslate\">DateField</code>, <code class=\"docutils literal notranslate\">TimeField</code> ou <code class=\"docutils literal notranslate\">DateTimeField</code>, une variable <code class=\"docutils literal notranslate\">kind</code> représentant une partie de date ou d’heure et un champ <code class=\"docutils literal notranslate\">output_field</code> qui vaut <code class=\"docutils literal notranslate\">DateTimeField()</code>, TimeField()` ou <code class=\"docutils literal notranslate\">DateField()</code>. Elle renvoie une date, une heure ou une date/heure en fonction de <code class=\"docutils literal notranslate\">output_field</code>, avec les champs jusqu’à <code class=\"docutils literal notranslate\">kind</code> définis à leur valeur minimale. Si <code class=\"docutils literal notranslate\">output_field</code> est omis, la valeur par défaut sera le type <code class=\"docutils literal notranslate\">output_field</code> de <code class=\"docutils literal notranslate\">expression</code>. Il est possible de passer aussi une sous-classe de <code class=\"docutils literal notranslate\">tzinfo</code>, habituellement fournie par <code class=\"docutils literal notranslate\">pytz</code>, pour tronquer une valeur dans un fuseau horaire spécifique.</p>\n<p>Étant donnée la date/heure <code class=\"docutils literal notranslate\">2015-06-15 14:30:50.000321+00:00</code>, les valeurs <code class=\"docutils literal notranslate\">kind</code> possibles renvoient :</p>\n<ul class=\"simple\">\n<li><p>« year »: 2015-01-01 00:00:00+00:00</p></li>\n<li><p>« quarter »: 2015-04-01 00:00:00+00:00</p></li>\n<li><p>« month »: 2015-06-01 00:00:00+00:00</p></li>\n<li><p>« day »: 2015-06-15 00:00:00+00:00</p></li>\n<li><p>« hour »: 2015-06-15 14:00:00+00:00</p></li>\n<li><p>« minute »: 2015-06-15 14:30:00+00:00</p></li>\n<li><p>« second »: 2015-06-15 14:30:50+00:00</p></li>\n</ul>\n<p>Si un fuseau horaire différent comme <code class=\"docutils literal notranslate\">Australia/Melbourne</code> est actif dans Django, la date/heure est convertie dans le nouveau fuseau avant que la valeur soit tronquée. Le décalage horaire de Melbourne dans la date d’exemple ci-dessus est +10:00. Les valeurs renvoyées lorsque ce fuseau est actif seront :</p>\n<ul class=\"simple\">\n<li><p>« year »: 2015-01-01 00:00:00+11:00</p></li>\n<li><p>« quarter »: 2015-04-01 00:00:00+10:00</p></li>\n<li><p>« month »: 2015-06-01 00:00:00+10:00</p></li>\n<li><p>« day »: 2015-06-16 00:00:00+10:00</p></li>\n<li><p>« hour »: 2015-06-16 00:00:00+10:00</p></li>\n<li><p>« minute »: 2015-06-16 00:30:00+10:00</p></li>\n<li><p>« second »: 2015-06-16 00:30:50+10:00</p></li>\n</ul>\n<p>L’année présente un décalage de +11:00 parce que le résultat traverse un passage à l’heure d’été.</p>\n<p>Chaque valeur <code class=\"docutils literal notranslate\">kind</code> ci-dessus possède une sous-classe de <code class=\"docutils literal notranslate\">Trunc</code> correspondante (énumérées ci-dessous) qui devrait être utilisée au lieu de l’équivalent plus bavard, c’est-à-dire <code class=\"docutils literal notranslate\">TruncYear(...)</code> au lieu de <code class=\"docutils literal notranslate\">Trunc(..., kind='year')</code>.</p>\n<p>Les sous-classes sont toutes définies comme des transformations, mais elles ne sont inscrites pour aucun champ, car les noms de requête qui s’imposent sont déjà réservés par les sous-classes de <code class=\"docutils literal notranslate\">Extract</code>.</p>\n<p>Exemple d’utilisation :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> datetime\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Count<span class=\"p\">,</span> DateTimeField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Trunc\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">321</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">123</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"mi\">25</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">27</span><span class=\"p\">,</span> <span class=\"mi\">999</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>experiments_per_day <span class=\"o\">=</span> Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   start_day<span class=\"o\">=</span>Trunc<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;day&#39;</span><span class=\"p\">,</span> output_field<span class=\"o\">=</span>DateTimeField<span class=\"p\">())</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;start_day&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>annotate<span class=\"p\">(</span>experiments<span class=\"o\">=</span>Count<span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> exp <span class=\"ow\">in</span> experiments_per_day<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>exp<span class=\"p\">[</span><span class=\"s1\">&#39;start_day&#39;</span><span class=\"p\">],</span> exp<span class=\"p\">[</span><span class=\"s1\">&#39;experiments&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">2015-06-15 00:00:00 2</span>\n<span class=\"go\">2015-12-25 00:00:00 1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>experiments <span class=\"o\">=</span> Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   start_day<span class=\"o\">=</span>Trunc<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;day&#39;</span><span class=\"p\">,</span> output_field<span class=\"o\">=</span>DateTimeField<span class=\"p\">())</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>filter<span class=\"p\">(</span>start_day<span class=\"o\">=</span>datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> exp <span class=\"ow\">in</span> experiments<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>exp<span class=\"o\">.</span>start_datetime<span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">2015-06-15 14:30:50.000321</span>\n<span class=\"go\">2015-06-15 14:40:02.000123</span>\n</code></pre></div>\n<section id=\"datefield-truncation\">\n<h4>Troncature de <code class=\"docutils literal notranslate\">DateField</code><a class=\"heading-anchor\" href=\"#datefield-truncation\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncYear\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncYear</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncYear\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'year'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncMonth\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncMonth</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncMonth\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'month'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncQuarter\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncQuarter</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncQuarter\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"2.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.0</p></aside>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'quarter'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<p>Ce sont des équivalences logiques à <code class=\"docutils literal notranslate\">Trunc('champ_date', kind)</code>. Elles tronquent toutes les parties de la date jusqu’à <code class=\"docutils literal notranslate\">kind</code>, ce qui permet de grouper ou de filtrer des dates avec une plus faible précision. <code class=\"docutils literal notranslate\">expression</code> peut avoir une valeur <code class=\"docutils literal notranslate\">output_field</code> de <code class=\"docutils literal notranslate\">DateField</code> ou de <code class=\"docutils literal notranslate\">DateTimeField</code>.</p>\n<p>Comme les champs <code class=\"docutils literal notranslate\">DateField</code> n’ont pas de composant d’heure, seules les sous-classes de <code class=\"docutils literal notranslate\">Trunc</code> qui s’appliquent aux parties de date peuvent être utilisées avec <code class=\"docutils literal notranslate\">DateField</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> datetime\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Count\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> TruncMonth<span class=\"p\">,</span> TruncYear\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"gp\">&gt;&gt;&gt; </span>start1 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2014</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">321</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>start2 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">123</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>start3 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"mi\">31</span><span class=\"p\">,</span> <span class=\"mi\">17</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">27</span><span class=\"p\">,</span> <span class=\"mi\">999</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>start1<span class=\"p\">,</span> start_date<span class=\"o\">=</span>start1<span class=\"o\">.</span>date<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>start2<span class=\"p\">,</span> start_date<span class=\"o\">=</span>start2<span class=\"o\">.</span>date<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>start3<span class=\"p\">,</span> start_date<span class=\"o\">=</span>start3<span class=\"o\">.</span>date<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>experiments_per_year <span class=\"o\">=</span> Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   year<span class=\"o\">=</span>TruncYear<span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;year&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   experiments<span class=\"o\">=</span>Count<span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> exp <span class=\"ow\">in</span> experiments_per_year<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>exp<span class=\"p\">[</span><span class=\"s1\">&#39;year&#39;</span><span class=\"p\">],</span> exp<span class=\"p\">[</span><span class=\"s1\">&#39;experiments&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">2014-01-01 1</span>\n<span class=\"go\">2015-01-01 2</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span> <span class=\"nn\">pytz</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>melb <span class=\"o\">=</span> pytz<span class=\"o\">.</span>timezone<span class=\"p\">(</span><span class=\"s1\">&#39;Australia/Melbourne&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>experiments_per_month <span class=\"o\">=</span> Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   month<span class=\"o\">=</span>TruncMonth<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>melb<span class=\"p\">))</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;month&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   experiments<span class=\"o\">=</span>Count<span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> exp <span class=\"ow\">in</span> experiments_per_month<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>exp<span class=\"p\">[</span><span class=\"s1\">&#39;month&#39;</span><span class=\"p\">],</span> exp<span class=\"p\">[</span><span class=\"s1\">&#39;experiments&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">2015-06-01 00:00:00+10:00 1</span>\n<span class=\"go\">2016-01-01 00:00:00+11:00 1</span>\n<span class=\"go\">2014-06-01 00:00:00+10:00 1</span>\n</code></pre></div>\n</section>\n<section id=\"datetimefield-truncation\">\n<h4>Troncature de <code class=\"docutils literal notranslate\">DateTimeField</code><a class=\"heading-anchor\" href=\"#datetimefield-truncation\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncDate\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncDate</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncDate\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'date'</span></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">output_field = DateField()</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">TruncDate</code> force le type de <code class=\"docutils literal notranslate\">expression</code> à une date plutôt que d’utiliser l’instruction SQL de troncature. Elle est aussi inscrite comme transformation pour <code class=\"docutils literal notranslate\">DateTimeField</code> sous la forme <code class=\"docutils literal notranslate\">__date</code>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncTime\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncTime</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncTime\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-added\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">New in Django 1.11</p><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">lookup_name = 'time'</span></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">output_field = TimeField()</span></dt>\n<dd></dd></dl>\n\n</aside>\n<p><code class=\"docutils literal notranslate\">TruncTime</code> force le type de <code class=\"docutils literal notranslate\">expression</code> à une heure plutôt que d’utiliser l’instruction SQL de troncature. Elle est aussi inscrite comme transformation pour <code class=\"docutils literal notranslate\">DateTimeField</code> sous la forme <code class=\"docutils literal notranslate\">__time</code>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncDay\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncDay</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncDay\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'day'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncHour\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncHour</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncHour\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'hour'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncMinute\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncMinute</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncMinute\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'minute'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.TruncSecond\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncSecond</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.TruncSecond\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'second'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<p>Ce sont des équivalences logiques à <code class=\"docutils literal notranslate\">Trunc('champ_dateheure', kind)</code>. Elles tronquent toutes les parties de la date jusqu’à <code class=\"docutils literal notranslate\">kind</code>, ce qui permet de grouper ou de filtrer des dates/heures avec une plus faible précision. <code class=\"docutils literal notranslate\">expression</code> doit avoir une valeur <code class=\"docutils literal notranslate\">output_field</code> de <code class=\"docutils literal notranslate\">DateTimeField</code>.</p>\n<p>Exemple d’utilisation :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> date<span class=\"p\">,</span> datetime\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Count\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> <span class=\"p\">(</span>\n<span class=\"gp\">... </span>    TruncDate<span class=\"p\">,</span> TruncDay<span class=\"p\">,</span> TruncHour<span class=\"p\">,</span> TruncMinute<span class=\"p\">,</span> TruncSecond<span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span> <span class=\"nn\">pytz</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>start1 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2014</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">321</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>start1<span class=\"p\">,</span> start_date<span class=\"o\">=</span>start1<span class=\"o\">.</span>date<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>melb <span class=\"o\">=</span> pytz<span class=\"o\">.</span>timezone<span class=\"p\">(</span><span class=\"s1\">&#39;Australia/Melbourne&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    date<span class=\"o\">=</span>TruncDate<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    day<span class=\"o\">=</span>TruncDay<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>melb<span class=\"p\">),</span>\n<span class=\"gp\">... </span>    hour<span class=\"o\">=</span>TruncHour<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>melb<span class=\"p\">),</span>\n<span class=\"gp\">... </span>    minute<span class=\"o\">=</span>TruncMinute<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    second<span class=\"o\">=</span>TruncSecond<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;date&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;day&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;hour&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;minute&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;second&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"go\">{&#39;date&#39;: datetime.date(2014, 6, 15),</span>\n<span class=\"go\"> &#39;day&#39;: datetime.datetime(2014, 6, 16, 0, 0, tzinfo=&lt;DstTzInfo &#39;Australia/Melbourne&#39; AEST+10:00:00 STD&gt;),</span>\n<span class=\"go\"> &#39;hour&#39;: datetime.datetime(2014, 6, 16, 0, 0, tzinfo=&lt;DstTzInfo &#39;Australia/Melbourne&#39; AEST+10:00:00 STD&gt;),</span>\n<span class=\"go\"> &#39;minute&#39;: &#39;minute&#39;: datetime.datetime(2014, 6, 15, 14, 30, tzinfo=&lt;UTC&gt;),</span>\n<span class=\"go\"> &#39;second&#39;: datetime.datetime(2014, 6, 15, 14, 30, 50, tzinfo=&lt;UTC&gt;)</span>\n<span class=\"go\">}</span>\n</code></pre></div>\n</section>\n<section id=\"timefield-truncation\">\n<h4>Troncature de <code class=\"docutils literal notranslate\">TimeField</code><a class=\"heading-anchor\" href=\"#timefield-truncation\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<aside class=\"version-note version-added\" data-version=\"1.11\" role=\"note\">\n<p class=\"version-note-title\">New in Django 1.11</p></aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"id0\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncHour</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#id0\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'hour'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"id2\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncMinute</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#id2\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'minute'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"id3\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TruncSecond</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">tzinfo<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#id3\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\">kind = 'second'</span></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<p>Ce sont des équivalences logiques à <code class=\"docutils literal notranslate\">Trunc('champ_heure', kind)</code>. Elles tronquent toutes les parties de l’heure jusqu’à <code class=\"docutils literal notranslate\">kind</code>, ce qui permet de grouper ou de filtrer des heures avec une plus faible précision. <code class=\"docutils literal notranslate\">expression</code> peut avoir une valeur <code class=\"docutils literal notranslate\">output_field</code> de <code class=\"docutils literal notranslate\">TimeField</code> ou de <code class=\"docutils literal notranslate\">DateTimeField</code>.</p>\n<p>Comme les champs <code class=\"docutils literal notranslate\">TimeField</code> n’ont pas de composant de date, seules les sous-classes de <code class=\"docutils literal notranslate\">Trunc</code> qui s’appliquent aux parties d’heure peuvent être utilisées avec <code class=\"docutils literal notranslate\">TimeField</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> datetime\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Count<span class=\"p\">,</span> TimeField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> TruncHour\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"gp\">&gt;&gt;&gt; </span>start1 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2014</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">321</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>start2 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2014</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">123</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>start3 <span class=\"o\">=</span> datetime<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"mi\">31</span><span class=\"p\">,</span> <span class=\"mi\">17</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">27</span><span class=\"p\">,</span> <span class=\"mi\">999</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>timezone<span class=\"o\">.</span>utc<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>start1<span class=\"p\">,</span> start_time<span class=\"o\">=</span>start1<span class=\"o\">.</span>time<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>start2<span class=\"p\">,</span> start_time<span class=\"o\">=</span>start2<span class=\"o\">.</span>time<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>start_datetime<span class=\"o\">=</span>start3<span class=\"p\">,</span> start_time<span class=\"o\">=</span>start3<span class=\"o\">.</span>time<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>experiments_per_hour <span class=\"o\">=</span> Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   hour<span class=\"o\">=</span>TruncHour<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> output_field<span class=\"o\">=</span>TimeField<span class=\"p\">()),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;hour&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>annotate<span class=\"p\">(</span>experiments<span class=\"o\">=</span>Count<span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> exp <span class=\"ow\">in</span> experiments_per_hour<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>exp<span class=\"p\">[</span><span class=\"s1\">&#39;hour&#39;</span><span class=\"p\">],</span> exp<span class=\"p\">[</span><span class=\"s1\">&#39;experiments&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">14:00:00 2</span>\n<span class=\"go\">17:00:00 1</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span> <span class=\"nn\">pytz</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>melb <span class=\"o\">=</span> pytz<span class=\"o\">.</span>timezone<span class=\"p\">(</span><span class=\"s1\">&#39;Australia/Melbourne&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>experiments_per_hour <span class=\"o\">=</span> Experiment<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   hour<span class=\"o\">=</span>TruncHour<span class=\"p\">(</span><span class=\"s1\">&#39;start_datetime&#39;</span><span class=\"p\">,</span> tzinfo<span class=\"o\">=</span>melb<span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s1\">&#39;hour&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>annotate<span class=\"p\">(</span>experiments<span class=\"o\">=</span>Count<span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> exp <span class=\"ow\">in</span> experiments_per_hour<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>exp<span class=\"p\">[</span><span class=\"s1\">&#39;hour&#39;</span><span class=\"p\">],</span> exp<span class=\"p\">[</span><span class=\"s1\">&#39;experiments&#39;</span><span class=\"p\">])</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">2014-06-16 00:00:00+10:00 2</span>\n<span class=\"go\">2016-01-01 04:00:00+11:00 1</span>\n</code></pre></div>\n</section>\n</section>\n</section>\n<section id=\"text-functions\">\n<span id=\"id4\"></span><h2>Fonctions textuelles<a class=\"heading-anchor\" href=\"#text-functions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"concat\">\n<h3><code class=\"docutils literal notranslate\">Concat</code><a class=\"heading-anchor\" href=\"#concat\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Concat\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Concat</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Concat\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte une liste d’au moins deux champs textes ou expressions et renvoie la concaténation de ces paramètres. Chaque paramètre doit être de type texte ou caractère. Si vous voulez concaténer un champ <code class=\"docutils literal notranslate\">TextField()</code> avec un champ <code class=\"docutils literal notranslate\">CharField()</code>, prenez alors la précaution d’indiquer à Django que le résultat <code class=\"docutils literal notranslate\">output_field</code> sera un champ <code class=\"docutils literal notranslate\">TextField()</code>. C’est aussi nécessaire lors de la concaténation avec une valeur <code class=\"docutils literal notranslate\">Value</code> comme dans l’exemple ci-dessous.</p>\n<p>Le résultat de cette fonction n’est jamais nul. Pour les moteurs où un paramètre nul aboutit à ce que toute l’expression devienne nulle, Django s’assure que chaque partie nulle est préalablement convertie en chaîne vide.</p>\n<p>Exemple d’utilisation :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get the display name as &quot;name (goes_by)&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> CharField<span class=\"p\">,</span> Value <span class=\"k\">as</span> V\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Concat\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">,</span> goes_by<span class=\"o\">=</span><span class=\"s1\">&#39;Maggie&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    screen_name<span class=\"o\">=</span>Concat<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> V<span class=\"p\">(</span><span class=\"s1\">&#39; (&#39;</span><span class=\"p\">),</span> <span class=\"s1\">&#39;goes_by&#39;</span><span class=\"p\">,</span> V<span class=\"p\">(</span><span class=\"s1\">&#39;)&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        output_field<span class=\"o\">=</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">... </span>    <span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>screen_name<span class=\"p\">)</span>\n<span class=\"go\">Margaret Smith (Maggie)</span>\n</code></pre></div>\n</section>\n<section id=\"length\">\n<h3><code class=\"docutils literal notranslate\">Length</code><a class=\"heading-anchor\" href=\"#length\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Length\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Length</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Length\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte un champ texte ou une expression unique et renvoie le nombre de caractères de la valeur. Si l’expression est nulle, la longueur renvoyée sera également nulle.</p>\n<p>Exemple d’utilisation :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get the length of the name and goes_by fields</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Length\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   name_length<span class=\"o\">=</span>Length<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>   goes_by_length<span class=\"o\">=</span>Length<span class=\"p\">(</span><span class=\"s1\">&#39;goes_by&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>name_length<span class=\"p\">,</span> author<span class=\"o\">.</span>goes_by_length<span class=\"p\">)</span>\n<span class=\"go\">(14, None)</span>\n</code></pre></div>\n<p>Cette expression peut aussi être inscrite comme transformation. Par exemple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> CharField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Length\n<span class=\"gp\">&gt;&gt;&gt; </span>CharField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Length<span class=\"p\">,</span> <span class=\"s1\">&#39;length&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get authors whose name is longer than 7 characters</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>authors <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>name__length__gt<span class=\"o\">=</span><span class=\"mi\">7</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"lower\">\n<h3><code class=\"docutils literal notranslate\">Lower</code><a class=\"heading-anchor\" href=\"#lower\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Lower\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Lower</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Lower\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte un champ texte ou une expression unique et renvoie sa représentation en minuscules.</p>\n<p>Cette expression peut aussi être inscrite comme transformation comme expliqué pour <a class=\"reference internal\" href=\"#django.db.models.functions.Length\" title=\"django.db.models.functions.Length\"><code class=\"xref py py-class docutils literal notranslate\">Length</code></a>.</p>\n<p>Exemple d’utilisation :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Lower\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>name_lower<span class=\"o\">=</span>Lower<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>name_lower<span class=\"p\">)</span>\n<span class=\"go\">margaret smith</span>\n</code></pre></div>\n</section>\n<section id=\"strindex\">\n<h3><code class=\"docutils literal notranslate\">StrIndex</code><a class=\"heading-anchor\" href=\"#strindex\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.StrIndex\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">StrIndex</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">string</em>, <em class=\"sig-param\">substring</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.StrIndex\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-added\" data-version=\"2.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.0</p></aside>\n<p>Renvoie un nombre entier positif correspondant à la position indicée (commençant à 1) de la première occurrence de <code class=\"docutils literal notranslate\">substring</code> dans <code class=\"docutils literal notranslate\">string</code>, ou 0 si <code class=\"docutils literal notranslate\">substring</code> est introuvable.</p>\n<p>Exemple d’utilisation :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Value <span class=\"k\">as</span> V\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> StrIndex\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Smith, Margaret&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Jackson&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Jackson&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    smith_index<span class=\"o\">=</span>StrIndex<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> V<span class=\"p\">(</span><span class=\"s1\">&#39;Smith&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>get<span class=\"p\">()</span><span class=\"o\">.</span>smith_index\n<span class=\"go\">0</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>authors <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>   smith_index<span class=\"o\">=</span>StrIndex<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> V<span class=\"p\">(</span><span class=\"s1\">&#39;Smith&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>filter<span class=\"p\">(</span>smith_index__gt<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Author: Margaret Smith&gt;, &lt;Author: Smith, Margaret&gt;]&gt;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avertissement</p>\n<p>Avec MySQL, la <a class=\"reference internal\" href=\"/fr/2.0/ref/databases/#mysql-collation\"><span class=\"std std-ref\">collation</span></a> d’une table de base de données détermine si les comparaisons de chaînes (telles que dans <code class=\"docutils literal notranslate\">expression</code> et <code class=\"docutils literal notranslate\">substring</code> de cette fonction) sont sensibles à la casse. Par défaut, les comparaisons ne sont pas sensibles à la casse.</p>\n</aside>\n</section>\n<section id=\"substr\">\n<h3><code class=\"docutils literal notranslate\">Substr</code><a class=\"heading-anchor\" href=\"#substr\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Substr\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Substr</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">pos</em>, <em class=\"sig-param\">length<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Substr\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie une sous-chaîne de longueur <code class=\"docutils literal notranslate\">length</code> extraite du champ ou de l’expression à partir de la position <code class=\"docutils literal notranslate\">pos</code>. L’indice de position commence à 1, il doit donc être plus grand que 0. Si <code class=\"docutils literal notranslate\">length</code> vaut <code class=\"docutils literal notranslate\">None</code>, tout le reste de la chaîne est renvoyé comme résultat.</p>\n<p>Exemple d’utilisation :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Set the alias to the first 5 characters of the name as lowercase</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Lower<span class=\"p\">,</span> Substr\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>update<span class=\"p\">(</span>alias<span class=\"o\">=</span>Lower<span class=\"p\">(</span>Substr<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">)))</span>\n<span class=\"go\">1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span>alias<span class=\"p\">)</span>\n<span class=\"go\">marga</span>\n</code></pre></div>\n</section>\n<section id=\"upper\">\n<h3><code class=\"docutils literal notranslate\">Upper</code><a class=\"heading-anchor\" href=\"#upper\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Upper\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Upper</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Upper\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Accepte un champ texte ou une expression unique et renvoie sa représentation en majuscules.</p>\n<p>Cette expression peut aussi être inscrite comme transformation comme expliqué pour <a class=\"reference internal\" href=\"#django.db.models.functions.Length\" title=\"django.db.models.functions.Length\"><code class=\"xref py py-class docutils literal notranslate\">Length</code></a>.</p>\n<p>Exemple d’utilisation :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Upper\n<span class=\"gp\">&gt;&gt;&gt; </span>Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;Margaret Smith&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>author <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>name_upper<span class=\"o\">=</span>Upper<span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>author<span class=\"o\">.</span>name_upper<span class=\"p\">)</span>\n<span class=\"go\">MARGARET SMITH</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"window-functions\">\n<span id=\"id5\"></span><h2>Fonctions de fenêtrage<a class=\"heading-anchor\" href=\"#window-functions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"version-note version-added\" data-version=\"2.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.0</p></aside>\n<p>Il existe un certain nombre de fonctions à utiliser dans une expression <a class=\"reference internal\" href=\"/fr/2.0/ref/models/expressions/#django.db.models.expressions.Window\" title=\"django.db.models.expressions.Window\"><code class=\"xref py py-class docutils literal notranslate\">Window</code></a> pour calculer la position des éléments ou le <a class=\"reference internal\" href=\"#django.db.models.functions.Ntile\" title=\"django.db.models.functions.Ntile\"><code class=\"xref py py-class docutils literal notranslate\">Ntile</code></a> de certaines lignes.</p>\n<section id=\"cumedist\">\n<h3><code class=\"docutils literal notranslate\">CumeDist</code><a class=\"heading-anchor\" href=\"#cumedist\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.CumeDist\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">CumeDist</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.CumeDist\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Calcule la distribution cumulative d’une valeur à l’intérieur d’une fenêtre ou d’une partition. La distribution cumulative est définie comme le nombre de lignes précédant ou apparentées à la ligne actuelle divisé par le nombre total de lignes dans l’intervalle.</p>\n</section>\n<section id=\"denserank\">\n<h3><code class=\"docutils literal notranslate\">DenseRank</code><a class=\"heading-anchor\" href=\"#denserank\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.DenseRank\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">DenseRank</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.DenseRank\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Équivalent à <a class=\"reference internal\" href=\"#django.db.models.functions.Rank\" title=\"django.db.models.functions.Rank\"><code class=\"xref py py-class docutils literal notranslate\">Rank</code></a> mais sans « trous ».</p>\n</section>\n<section id=\"firstvalue\">\n<h3><code class=\"docutils literal notranslate\">FirstValue</code><a class=\"heading-anchor\" href=\"#firstvalue\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.FirstValue\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">FirstValue</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.FirstValue\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Renvoie la valeur évaluée à la ligne se situant en premier dans l’intervalle de fenêtre, ou <code class=\"docutils literal notranslate\">None</code> si une telle valeur n’existe pas.</p>\n</section>\n<section id=\"lag\">\n<h3><code class=\"docutils literal notranslate\">Lag</code><a class=\"heading-anchor\" href=\"#lag\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Lag\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Lag</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">offset<span class=\"o\">=</span><span class=\"default_value\">1</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Lag\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Calcule le décalage de valeur selon <code class=\"docutils literal notranslate\">offset</code>, et si aucune ligne n’existe à cet endroit, renvoie <code class=\"docutils literal notranslate\">default</code>.</p>\n<p><code class=\"docutils literal notranslate\">default</code> doit avoir le même type que <code class=\"docutils literal notranslate\">expression</code>; cependant, cette validation se fait dans la base de données et pas dans le code Python.</p>\n</section>\n<section id=\"lastvalue\">\n<h3><code class=\"docutils literal notranslate\">LastValue</code><a class=\"heading-anchor\" href=\"#lastvalue\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.LastValue\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">LastValue</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.LastValue\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Comparable à <a class=\"reference internal\" href=\"#django.db.models.functions.FirstValue\" title=\"django.db.models.functions.FirstValue\"><code class=\"xref py py-class docutils literal notranslate\">FirstValue</code></a>, renvoie la dernière valeur dans une clause d’intervalle donnée.</p>\n</section>\n<section id=\"lead\">\n<h3><code class=\"docutils literal notranslate\">Lead</code><a class=\"heading-anchor\" href=\"#lead\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Lead\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Lead</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">offset<span class=\"o\">=</span><span class=\"default_value\">1</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Lead\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Calcule la valeur de tête dans un <a class=\"reference internal\" href=\"/fr/2.0/ref/models/expressions/#window-frames\"><span class=\"std std-ref\">intervalle</span></a> donné. <code class=\"docutils literal notranslate\">offset</code> et <code class=\"docutils literal notranslate\">default</code> sont tous deux évalués en fonction de la ligne actuelle.</p>\n<p><code class=\"docutils literal notranslate\">default</code> doit avoir le même type que <code class=\"docutils literal notranslate\">expression</code>; cependant, cette validation se fait dans la base de données et pas dans le code Python.</p>\n</section>\n<section id=\"nthvalue\">\n<h3><code class=\"docutils literal notranslate\">NthValue</code><a class=\"heading-anchor\" href=\"#nthvalue\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.NthValue\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">NthValue</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">nth<span class=\"o\">=</span><span class=\"default_value\">1</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.NthValue\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Calcule la ligne relative au décalage <code class=\"docutils literal notranslate\">nth</code> (la valeur doit être positive) à l’intérieur de la fenêtre. Renvoie <code class=\"docutils literal notranslate\">None</code> si aucune ligne ne correspond.</p>\n<p>Certaines bases de données gèrent différemment une nième valeur inexistante. Par exemple, Oracle renvoie une chaîne vide au lieu de <code class=\"docutils literal notranslate\">None</code> pour les expressions basées sur des caractères. Django n’applique aucune conversion dans ces cas.</p>\n</section>\n<section id=\"ntile\">\n<h3><code class=\"docutils literal notranslate\">Ntile</code><a class=\"heading-anchor\" href=\"#ntile\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Ntile\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Ntile</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">num_buckets<span class=\"o\">=</span><span class=\"default_value\">1</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Ntile\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Calcule une partition pour chacune des lignes dans la clause d’intervalle, distribuant les nombres aussi également que possible entre 1 et <code class=\"docutils literal notranslate\">num_buckets</code>. Si les lignes ne sont pas divisibles de manière égale par le nombre de « buckets », un ou plusieurs de ceux-ci seront représentés plus fréquemment.</p>\n</section>\n<section id=\"percentrank\">\n<h3><code class=\"docutils literal notranslate\">PercentRank</code><a class=\"heading-anchor\" href=\"#percentrank\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.PercentRank\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">PercentRank</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.PercentRank\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Calcule le rang de centile des lignes dans la clause d’intervalle. Ce calcul est équivalent à l’évaluation de</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">(</span>rank <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"p\">(</span>total rows <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Le tableau suivant explique le calcul du rang de centile d’une ligne :</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>N° de ligne</p></th>\n<th class=\"head\"><p>Valeur</p></th>\n<th class=\"head\"><p>Rang</p></th>\n<th class=\"head\"><p>Calcul</p></th>\n<th class=\"head\"><p>Rang en pourcentage</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p>1</p></td>\n<td><p>15</p></td>\n<td><p>1</p></td>\n<td><p>(1-1)/(7-1)</p></td>\n<td><p>0.0000</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>2</p></td>\n<td><p>20</p></td>\n<td><p>2</p></td>\n<td><p>(2-1)/(7-1)</p></td>\n<td><p>0.1666</p></td>\n</tr>\n<tr class=\"row-even\"><td><p>3</p></td>\n<td><p>20</p></td>\n<td><p>2</p></td>\n<td><p>(2-1)/(7-1)</p></td>\n<td><p>0.1666</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>4</p></td>\n<td><p>20</p></td>\n<td><p>2</p></td>\n<td><p>(2-1)/(7-1)</p></td>\n<td><p>0.1666</p></td>\n</tr>\n<tr class=\"row-even\"><td><p>5</p></td>\n<td><p>30</p></td>\n<td><p>5</p></td>\n<td><p>(5-1)/(7-1)</p></td>\n<td><p>0.6666</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>6</p></td>\n<td><p>30</p></td>\n<td><p>5</p></td>\n<td><p>(5-1)/(7-1)</p></td>\n<td><p>0.6666</p></td>\n</tr>\n<tr class=\"row-even\"><td><p>7</p></td>\n<td><p>40</p></td>\n<td><p>7</p></td>\n<td><p>(7-1)/(7-1)</p></td>\n<td><p>1.0000</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</section>\n<section id=\"rank\">\n<h3><code class=\"docutils literal notranslate\">Rank</code><a class=\"heading-anchor\" href=\"#rank\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.Rank\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Rank</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.Rank\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Comparable à <code class=\"docutils literal notranslate\">RowNumber</code>, cette fonction calcule le rang des lignes de la fenêtre. Le rang calculé comporte des trous. Utilisez <a class=\"reference internal\" href=\"#django.db.models.functions.DenseRank\" title=\"django.db.models.functions.DenseRank\"><code class=\"xref py py-class docutils literal notranslate\">DenseRank</code></a> pour calculer le rang sans trous.</p>\n</section>\n<section id=\"rownumber\">\n<h3><code class=\"docutils literal notranslate\">RowNumber</code><a class=\"heading-anchor\" href=\"#rownumber\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.functions.RowNumber\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RowNumber</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.functions.RowNumber\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Calcule le numéro de ligne selon le tri de la clause d’intervalle ou selon le tri de toute la requête s’il n’y a pas partition dans l”<a class=\"reference internal\" href=\"/fr/2.0/ref/models/expressions/#window-frames\"><span class=\"std std-ref\">intervalle de fenêtre</span></a>.</p>\n</section>\n</section>","rootId":"module-django.db.models.functions","toc":[{"title":"Fonctions de comparaison et de conversion","anchor":"comparison-and-conversion-functions","children":[{"title":"Cast","anchor":"cast","children":[]},{"title":"Coalesce","anchor":"coalesce","children":[]},{"title":"Greatest","anchor":"greatest","children":[]},{"title":"Least","anchor":"least","children":[]}]},{"title":"Fonctions de date","anchor":"date-functions","children":[{"title":"Extract","anchor":"extract","children":[{"title":"Extractions DateField","anchor":"datefield-extracts","children":[]},{"title":"Extractions DateTimeField","anchor":"datetimefield-extracts","children":[]}]},{"title":"Now","anchor":"now","children":[]},{"title":"Trunc","anchor":"trunc","children":[{"title":"Troncature de DateField","anchor":"datefield-truncation","children":[]},{"title":"Troncature de DateTimeField","anchor":"datetimefield-truncation","children":[]},{"title":"Troncature de TimeField","anchor":"timefield-truncation","children":[]}]}]},{"title":"Fonctions textuelles","anchor":"text-functions","children":[{"title":"Concat","anchor":"concat","children":[]},{"title":"Length","anchor":"length","children":[]},{"title":"Lower","anchor":"lower","children":[]},{"title":"StrIndex","anchor":"strindex","children":[]},{"title":"Substr","anchor":"substr","children":[]},{"title":"Upper","anchor":"upper","children":[]}]},{"title":"Fonctions de fenêtrage","anchor":"window-functions","children":[{"title":"CumeDist","anchor":"cumedist","children":[]},{"title":"DenseRank","anchor":"denserank","children":[]},{"title":"FirstValue","anchor":"firstvalue","children":[]},{"title":"Lag","anchor":"lag","children":[]},{"title":"LastValue","anchor":"lastvalue","children":[]},{"title":"Lead","anchor":"lead","children":[]},{"title":"NthValue","anchor":"nthvalue","children":[]},{"title":"Ntile","anchor":"ntile","children":[]},{"title":"PercentRank","anchor":"percentrank","children":[]},{"title":"Rank","anchor":"rank","children":[]},{"title":"RowNumber","anchor":"rownumber","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/2.0/ref/"},{"docname":"ref/models/index","title":"Modèles","url":"/fr/2.0/ref/models/"}],"prev":{"docname":"ref/models/conditional-expressions","title":"Expressions conditionnelles","url":"/fr/2.0/ref/models/conditional-expressions/"},"next":{"docname":"ref/request-response","title":"Les objets requête et réponse","url":"/fr/2.0/ref/request-response/"},"formats":{"html":"/fr/2.0/ref/models/database-functions/","markdown":"/fr/2.0/ref/models/database-functions.md","json":"/fr/2.0/ref/models/database-functions.json"},"source":"https://github.com/django/django/blob/stable/2.0.x/docs/ref/models/database-functions.txt","official":"https://docs.djangoproject.com/fr/2.0/ref/models/database-functions/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}