IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Problème Conversion type date


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 212
    Points : 71
    Points
    71
    Par défaut Problème Conversion type date
    Bonjour,
    j'ai un souci de conversion de type text vers date.

    J'ai une table contenant 2 colonnes reponse(type text),type.
    Je sais que si type = date alors la reponse est une date.
    Exemple :

    id|reponse|date
    -------------
    1|2014-01-01|date
    2|mon texte|texte
    3|2014-02-01|date
    Ma query:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT reponse::date FROM table WHERE type = 'date'    ==> OK pas d'erreur
    SELECT count(*) FROM table WHERE type = 'date' AND reponse::date BETWEEN '2014-01-01' AND  '2014-02-01'   ==> ERREUR Invalid input syntax for type date :"mon texte", a priori comportement normal
    J'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT COUNT(*) FROM
    (
           SELECT reponse ::date as reponse_date FROM table WHERE type = 'date'
    ) TAB
    WHERE reponse_date BETWEEN '2014-01-01' AND  '2014-02-01'   
    ==> ERREUR Invalid input syntax for type date :"mon texte"
    Quelqu'un aurait une solution pour qu'il ne tente de convertir que les données retournées par la sous-requête?
    Il semble que, malgré le filtre, il tente de convertir les data de la table entière.
    j'ai besoin de faire cela à cause des 2 paramètres du BETWEEN. Je ne connais pas à l'avance le format de la date passée en paramètre...

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    de mémoire lorsque l'on passe par une CTE postgres force le plan à executer la cte avant la requête principale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    with tmp as (
    select val::date as dte
    from t_date
    where type = 'date')
    select count(*) from tmp b
    where b.dte between '201-01-01' and '2014-01-31'
    Vérifier dans le plan d’exécution que vous avez bien une table temporaire qui est créée.


    Sinon, en mettant un index du type : create index .... (type, response) cela le forcera peut-être à filtrer les éléments dans l'ordre que vous souhaitez

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 212
    Points : 71
    Points
    71
    Par défaut
    En effet cela fonctionne ! merci !

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Si vous avez choisi la solution avec la CTE, faites attention tout de même aux futures évolutions.

    Sur les autres SGBD, le plan d’exécution est retravaillé en tenant compte des CTE, du coup des jointures / conditions pourraient être poussées au niveau de la CTE ..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème insertion type date dans la base MySQL
    Par elhou80 dans le forum JDBC
    Réponses: 3
    Dernier message: 12/11/2013, 11h57
  2. Problème conversion de date
    Par farfouch00 dans le forum Silverlight
    Réponses: 14
    Dernier message: 07/12/2011, 15h33
  3. problème avec conversion au type date
    Par cute_h dans le forum Langage
    Réponses: 10
    Dernier message: 08/09/2009, 17h33
  4. [JAVA]Problème de type date avec oracle Sous Ireport
    Par lazarel dans le forum iReport
    Réponses: 5
    Dernier message: 27/07/2007, 10h45
  5. Problème conversion date
    Par mat.M dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2004, 15h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo