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

PostgreSQL Discussion :

Problème conversion date


Sujet :

PostgreSQL

  1. #1
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2017
    Messages : 53
    Points : 53
    Points
    53
    Par défaut Problème conversion date
    Bonjour,

    Je suis totalement débutante en Postgre, mon domaine est plus Oracle

    Je veux récupérer uniquement la date dans ma valeur timestamp, j'ai vus qu'il était possible de le faire avec la fonction date de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select date(substring('2022/02/10 16:30:00' from 1 for 10));
    J'aimerais intégré cela dans ma grosse requête à la place de la ligne suivante : and 4.TSTAMP >= TO_TIMESTAMP('2022-02-10 15:30:00','YYYY-MM-DD HH24:MI:SS')

    Grosse requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select
    matricule
         , nomNaissance
         , nomUsage
         , prenoms   
         , case [...]
    from 4m.table_1 4, 4m.table_12 A, 4m.table_1 2, 4m.table_13 3
    where 4.recordkey = A.recordkey
    and 4.TID = 2.TID
    and 2.recordkey = 3.recordkey
    --select date(substring('2022/02/10 16:30:00' from 1 for 10)); utiliser la fonction date
    and date(substring('2022-02-10 15:30:00'  from 1 for 10))
    --and 4.TSTAMP >= TO_TIMESTAMP('2022-02-10 15:30:00','YYYY-MM-DD HH24:MI:SS')
    ORDER BY matricule ;
    J'ai une erreur avec erreur de syntaxe, alors j'ai décider d'enlever la partie from 1 to for 10 et malheureusement l'erreur que j'ai maintenant est la suivante
    ERROR: ERREUR: erreur de syntaxe sur ou près de « ; »
    LINE 31: ORDER BY Matricule;
    Le format de ma variable tstamp est : tstamp timestamp without time zone NOT NULL,

    Si quelqu'un pourrais m'aider ça serais super

    Merci à tous

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 899
    Points : 53 140
    Points
    53 140
    Billets dans le blog
    6
    Par défaut
    L'erreur n'a rien à voir avec votre date c'est juste que votre caractère "point-virgule" est génant !

    A +

  3. #3
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2017
    Messages : 53
    Points : 53
    Points
    53
    Par défaut
    Bonjour,

    Merci pour votre réponse, je l'ai enlevé et j'ai toujours l'erreur, on ne doit pas mettre de ';' en postgre ?

    ERROR: ERREUR: erreur de syntaxe à la fin de l'entrée
    LINE 31: ORDER BY codeMatricule

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 899
    Points : 53 140
    Points
    53 140
    Billets dans le blog
    6
    Par défaut
    Tous les noms des objets doivent correspondent à la norme SQL :
    1) commencer par une lettre ou le blanc souligné. Votre schéma 4m n'est pas conforme. Vos alias de table 2, 3, 4 ne sont pas conforme
    2) un membre de prédicat doit avoir un comparateur. Le membre and date(substring('2022-02-10 15:30:00' from 1 for 10)) ne compare avec rien

    Commencez par apprendre le SQL ! Parce que là vous ne vous en sortirez pas !
    https://sqlpro.developpez.com/cours/sqlaz/fondements/
    https://sqlpro.developpez.com/cours/sqlaz/select/

    A +

  5. #5
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2017
    Messages : 53
    Points : 53
    Points
    53
    Par défaut
    Pour info j'ai modifié le nom de mes tables et donc les alias également, j'ai voulu faire simple et ne pas vous envoyer le nom de mes tables de prod

    Alors 4m est mon schéma, pour les alias de mes tables certes j'ai mis 2,3,4 mais cela dans mon script complet sont des alias de mes tables sur 2 voir 3 digits

    Merci je connais bien plus que les bases en sql

    Sympa de demander de l'aide et de se faire rembarrer comme vous le faites.

  6. #6
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 511
    Points : 10 249
    Points
    10 249
    Par défaut
    N'empêche que SQLPro a raison.

    Comment voulez-vous que l'on vous aide si vous nous donnez un code foireux ?
    Ensuite, comme SQLPro le dit, le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    and date(substring('2022-02-10 15:30:00'  from 1 for 10))
    n'est pas une valeur logique. D'où l'erreur sur le ORDER BY puisqu'il attend un opérateur logique.

  7. #7
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2017
    Messages : 53
    Points : 53
    Points
    53
    Par défaut
    Voilà mon code complet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select 
    matricule
         , nomNaissance
         , nomUsage
         , prenoms   
         , case [...]
    from mon_schema.table1 A, mon_schema.table2 B, mon_schema.table1 C, mon_schema.table3 D
    where (B.TEXT like 'Erreur - %' or B.TEXT like 'Avertissement -%' or B.TEXT like 'Erreur Fonctionnelle - Erreur Transcodification - %')
    and A.recordkey = B.recordkey
    and A.TID = C.TID
    and xml_is_well_formed_document(encode(msg, 'escape'))
    and C.recordkey = D.recordkey
    and A.TSTAMP >= TO_TIMESTAMP('2022-02-10 17:30:00','YYYY-MM-DD HH24:MI:SS')
    ORDER BY id;
    Je voudrais remplacer la dernière ligne en ne gardant que la date et non pas la partie timestamp

    NB: Pas trop mal pour quelqu'un qui ne connait pas les bases de SQL à priori, celui-ci fonctionne correctement

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 340
    Points : 39 738
    Points
    39 738
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Il est préférable de séparer ce qui ressort des jointures de ce qui ressort des restrictions, l'opérateur JOIN existe depuis une vingtaine d'années, autant l'utiliser

    Donc, j'ai remplacé ci-dessous les jointures implicites codées dans le WHERE par des jointures normalisées utilisant l'opérateur JOIN et remplacé les noms de schéma pour qu'ils commencent par une lettre (M4 au lieu de 4M).
    Tant qu'à faire, j'ai remplacé les alias par des alias parlants, qui rappellent le nom de la table, ça évite de s'y perdre.

    Ce qui donne (après un peu de mise en forme, c'est plus lisible) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select matricule
         , nomNaissance
         , nomUsage
         , prenoms   
         , case [...]
    from M4.table_1  as T1a
    inner join M4.table_12 as T12
       on T12.recordkey=T1a.recordkey
    inner join M4.table_1  as T1b
       on T1b.TID=T1a.TID -- il manque un critère de jointure
    inner join m4.table_13 as T13
       on T13.recordkey = T1b.recordkey
    WHERE -- ajouter ici la restriction sur la date
    ORDER BY matricule ;

    Ce faisant, on constate qu'il manque un critère pour l'auto-jointure de table_1

    Une chose m'inquiète, la colonne "prenoms" avec un "s" final suggère qu'il y aurait plusieurs prénoms dans la même colonne
    J'espère que ce n'est pas le cas, ce serait un viol de la 1NF lourd de conséquences.

    EDIT : nos messages se sont croisés, on peut extraire la date d'un time stamp avec select date(mon_timestamp)

  9. #9
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2017
    Messages : 53
    Points : 53
    Points
    53
    Par défaut
    Bonjour escartefigue,

    Je vais suivre votre conseil en faisant les jointures aves les inner join

    Je vous rassure, une faute de frappe à la création de la colonne Prénom, il y a bien un seul prénom

    Oui j'avais trouver celle-ci dans la doc postgre, mais je n'arrive pas à la faire fonctionner correctement, car dans ma colonne tstamp j'ai 3 dates différentes
    Moi il faut vraiment que celle-ci soit saisi en dure dans le code, pour que je puisses la choisir au niveau de la table, pour cela que j'était partie sur la solution de la fonction date avec le substring :s

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 340
    Points : 39 738
    Points
    39 738
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Hyena77 Voir le message
    par contre dans ma colonne tstamp j'ai 3 dates différentes
    S'il s'agit de 3 dates dans la même colonne de la même ligne, alors c'est la cata on revient sur un viol de 1NF et idéalement, il faut refaire le modèle de données !
    Si ce sont 3 lignes différentes, alors aucun souci : where date(mon_timestamp)='2021-05-10' par exemple

  11. #11
    Membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Octobre 2017
    Messages : 53
    Points : 53
    Points
    53
    Par défaut
    Non je me suis mal exprimé pardon

    J'ai plusieurs dates différentes dans l'ensemble de ma table

    Merci beaucoup ça fonctionne correctement maintenant

    Bonne journée

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

Discussions similaires

  1. Problème conversion date vb.net access 2010
    Par ismaiila dans le forum VB.NET
    Réponses: 2
    Dernier message: 24/04/2014, 10h49
  2. problème conversion date en format yyMMdd
    Par CosaNostra dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 08/06/2010, 13h41
  3. Problème conversion date
    Par pit007 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 20/11/2007, 17h12
  4. problème conversion date en chaîne
    Par fakhita dans le forum Langage
    Réponses: 6
    Dernier message: 12/07/2007, 14h16
  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