banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GeoDataDays 2025

#1 Mon 01 December 2014 16:54

mfangain
Participant actif
Date d'inscription: 12 Jun 2012
Messages: 88

QGIS 2.6: Filtre sur champ date

Bonjour à tous,

Je souhaite filtrer une couche sur un champs de type Date.

Lorsque je vais dans "sélectionner des entités par expression", en utilisant la formule :

Code:

Date>$now

J'obtiens bien les objets concernés.

Par contre, si je vais dans la fenêtre des propriétés de la couche, pour faire un sous-ensemble (onglet Général, bouton constructeur de requête), et que j'utilise la même formule, j'obtiens une erreur :


Code:

Une erreur a été rencontrée lors de l'exécution de la requête.
Le prestataire de donné a dit :
OGR [3] erreur 1: SQL Expression Parsing Error: syntax error, unexpected $undefined. Occured around :
T * FROM "Lignes" WHERE ("LI_datedeb" < $now or "LI_datedeb" is null) and  ("LI_
                                        ^

Je suppose que le format doit être différent dans cette fenêtre, mais je n'ai pas trouvé la nomenclature qui va bien.

J'ai également essayé de créer un champ virtuel qui se remplit avec la date d'aujourd'hui, et de comparer les 2 champs, mais j'obtiens également une erreur :

Code:

Une erreur a été rencontrée lors de l'exécution de la requête.
Le prestataire de donné a dit :
OGR [3] erreur 1: Type mismatch or improper type of arguments to < operator.

Est-ce que quelqu'un sait comment pouvoir filtrer une couche sur un champ date par rapport à date du jour?

Merci d'avance.

MFANGAIN

PS : oups, j'ai oublié de préciser dans le titre [QGIS 2.6]

Dernière modification par mfangain (Mon 01 December 2014 16:59)

Hors ligne

 

#2 Mon 01 December 2014 17:43

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1264
Site web

Re: QGIS 2.6: Filtre sur champ date

Bonjour,

il n'est en effet pas possible d'utiliser de variable dans la boite de dialogue du constructeur de requête. Vous devez alors utiliser une valeur de date '2014-12-01'.

Si vos données sont stockées dans PostGis : now() est une fonction SQL qui sera comprise et utilisable dans le constructeur de requête.


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#3 Tue 02 December 2014 08:39

mfangain
Participant actif
Date d'inscription: 12 Jun 2012
Messages: 88

Re: QGIS 2.6: Filtre sur champ date

Bonjour,

Merci pour votre réponse.

Mettre une valeur de date ne me convient pas, car j'ai une date de début et une date de fin dans mes données, et je souhaite avoir à tout moment une vue des données valables à l'instant t. Et changer la date à la main tous les jours n'est pas très fonctionnel ;-)
Pour l'instant, mes données sont en shp, mais j'attends la mise en place d'une plateforme PostGIS, donc je ferais quelques tests quand mes données seront en base de données.

Bonne journée.

MFANGAIN

Hors ligne

 

#4 Tue 02 December 2014 09:10

mfangain
Participant actif
Date d'inscription: 12 Jun 2012
Messages: 88

Re: QGIS 2.6: Filtre sur champ date

Petite précision : même un filtre sur une valeur fixe (date<'2014-12-02', ou date='2014-12-02' ) me renvoie une erreur :

Code:

Une erreur a été rencontrée lors de l'exécution de la requête.
Le prestataire de donné a dit :
OGR [3] erreur 1: Type mismatch or improper type of arguments to < operator.

Les filtres sur les attributs qui ne sont pas au format date fonctionnent très bien : je me demande s'il n'y a pas un souci dû au format...

Hors ligne

 

#5 Tue 02 December 2014 09:51

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 4119

Re: QGIS 2.6: Filtre sur champ date

Bonjour,
Et pourquoi ne pas utiliser une symbologie en ensemble de règles (et cacher ce qui ne correspond pas au critère)? Ce n'est pas du filtre mais visuellement ça répond à la question... et ça s'actualise au quotidien...

Hors ligne

 

#6 Tue 02 December 2014 10:34

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1264
Site web

Re: QGIS 2.6: Filtre sur champ date

mfangain a écrit:

je me demande s'il n'y a pas un souci dû au format...


Il s'agit visiblement d'un bug d'ogr :
http://gis.stackexchange.com/questions/ … ogr-1-11-0
http://trac.osgeo.org/gdal/ticket/5507

Et voici un contournement :

Code:

 cast("LI_datedeb"as character) < '1970/01/01'"

Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#7 Tue 02 December 2014 11:43

mfangain
Participant actif
Date d'inscription: 12 Jun 2012
Messages: 88

Re: QGIS 2.6: Filtre sur champ date

Effectivement, la symbologie aurait pu être une piste, avec l'inconvénient d'avoir accès à tous les objets dans la table d'attributs.

Mais le code de contournement de MathieuB fonctionne très bien, merci beaucoup!
Bon, après, ça reste un mystère pour moi de devoir mettre des / alors que ce sont des - dans la base...!
C'est pour ça qu'on ne s'ennuie jamais en informatique big_smile

Hors ligne

 

#8 Tue 02 December 2014 12:25

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 4119

Re: QGIS 2.6: Filtre sur champ date

Bon, après, ça reste un mystère pour moi de devoir mettre des / alors que ce sont des - dans la base...!


En mettant des -, ça marche aussi et ça ne renvoie pas le même nombre d'entités. Il semble que le '-' soit plus petit que le / c'est-à-dire '2014/12/02' est plus grand que '2014-12-02' à cause du premier slash et donc '2014/12/01' l'est aussi.
Je me demande s'il n'y a pas un truc à corriger par là.

Là où ça se corse, à mon sens, c'est que, lorsqu'on demande à avoir la liste des échantillon de date, on obtient :
- dans l'onglet Général de Propriétés > Constructeur de requêtes, des données du style 2014/12/02
- et dans la fenêtre de sélection d'entités par expression, des données du style 2014-12-02, tel que présenté dans la table d'attributs.

Dernière modification par SANTANNA (Tue 02 December 2014 12:27)

Hors ligne

 

#9 Tue 02 December 2014 13:06

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1264
Site web

Re: QGIS 2.6: Filtre sur champ date

Oui sur ma table de test mes dates sont formatées comme ceci, avec des '/'  : yyyy/mm/dd

J'ai fait un copier/coller trop rapide pour vous répondre.

Il faut utiliser le caractère '-' dans votre cas.


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#10 Tue 02 December 2014 14:24

mfangain
Participant actif
Date d'inscription: 12 Jun 2012
Messages: 88

Re: QGIS 2.6: Filtre sur champ date

C'est le risque à comparer des dates transformées en caractères : on peut tomber sur des incohérences.
La précision sur le tri entre - et / est effectivement importante!

Personnellement, j'ai contourné le souci en créant un champ virtuel (merci la v 2.6!) qui se remplit avec la date du jour, et je compare mes champs date début et date de fin avec ce champs.
Je n'ai pas étudié tous les cas de figure, mais ça semble répondre à mon besoin.

Merci encore pour votre aide!

MFANGAIN

Hors ligne

 

#11 Wed 03 December 2014 14:28

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1264
Site web

Re: QGIS 2.6: Filtre sur champ date

mfangain a écrit:

j'ai contourné le souci en créant un champ virtuel (merci la v 2.6!) qui se remplit avec la date du jour, et je compare mes champs date début et date de fin avec ce champs


Belle utilisation des champs virtuels !


Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

#12 Thu 13 April 2017 12:10

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1264
Site web

Re: QGIS 2.6: Filtre sur champ date

Bonjour,

petit déterrage de post.
La comparaison d'un champ date avec une chaîne de caractère par ex "date_debut" < '2017-01-01' renvoie une "erreur", normale... on ne peut comparer une date avec un texte.
Un contournement plus logique que celui mentionné plus haut par moi-même :

Code:

cast("date_debut" as date) < cast('2017-01-01'as date)

Mathieu BOSSAERT
Association GeoRezo

Hors ligne

 

Pied de page des forums

Copyright Association GeoRezo