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

WinDev Discussion :

Extraire l'année d'une date heure


Sujet :

WinDev

  1. #1
    Membre du Club
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 84
    Points : 49
    Points
    49
    Par défaut Extraire l'année d'une date heure
    Bonjour,

    Je fais appel à vous car j'ai une base en Hyperfile dans laquelle j'essaie de faire une requête afin d'extraire une année.

    J'ai dans ma table BDD_ONE, un champ DATE_ADH qui est une date heure.

    J'aimerais faire une requête sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select * FROM BDD_ONE WHERE YEAR(BDD_ONE.DATE_ADH) = "+combo_annee..ValeurAffichée+"
    Le souci est que cette requête ne fonctionne pas.

    Message d'erreur au moment du HLitPremier(RqEnt) :
    Erreur dans le code SQL de la requête <RqEnt>. Initialisation de la requête impossible.

    Merci pour votre aide.

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 276
    Points : 739
    Points
    739
    Par défaut
    Bonjour,

    En utilisant la fonction LEFT, ça doit fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select * FROM BDD_ONE WHERE LEFT(BDD_ONE.DATE_ADH,4) = "+combo_annee..ValeurAffichée+"

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 038
    Points : 9 347
    Points
    9 347
    Par défaut
    Tu dis que l'erreur est au moment du hLitPremier ().

    Bizarre. Elle n'est pas dans l'instruction précédente, dans le hExecuteRequete() ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #4
    Membre du Club
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 84
    Points : 49
    Points
    49
    Par défaut
    Bonjour et merci pour vos réponses.

    J'ai corrigé une erreur de frappe et je n'ai plus l'erreur au HlitPremier.

    Quand je met un point d'arrêt sur le HexecuteRequeteSql et que je me place sur ma date dans ma requête, ma date est égale à 0000000000000000.

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 276
    Points : 739
    Points
    739
    Par défaut
    La date est à 0000000000000000 pour tous les enregistrements renvoyés par la requête ?
    Il y a des dateheure non renseignées dans la base de données (ce qui expliquerait) ?

  6. #6
    Membre du Club
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 84
    Points : 49
    Points
    49
    Par défaut
    Bonjour,

    Oui la date est 00000000000000000 pour tous les enregistrement ce qui n'est pas le cas en réalité car la majorité de mes dates sont renseignées.
    Mais oui en effet certaines dateheure ne sont pas renseignées.

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 038
    Points : 9 347
    Points
    9 347
    Par défaut
    Tout ça est très confus.

    Tu dis :
    Quand je met un point d'arrêt sur le HexecuteRequeteSql et que je me place sur ma date dans ma requête, ma date est égale à 0000000000000000.
    Oui, c'est normal. Même quand ton bug sera corrigé, tu auras la même chose.

    Si tu lances simplement cette requête:
    as-tu le comportement voulu ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  8. #8
    Membre du Club
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 84
    Points : 49
    Points
    49
    Par défaut
    Oui j'ai bien les résultats attendus.

    Exemple :
    201710180740000000

    Voici ma requête "terminée" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ssql="SELECT count(BDD_DOS.REF) as iNbLigne, "+... 
    " WL.DateVersNuméroDeSemaine(BDD_ONE.DATE_ADH) AS SEMAINE "+...
    "FROM BDD_ONE, BDD_DOS "+...
    "WHERE BDD_ONE.DATE_ADH IS NOT NULL "+...
    "AND left(BDD_ONE.DATE_ADH, 4)="+combo_annee..ValeurAffichée+" "+...
    "AND BDD_DOS.DATE_ARG IS NULL "+...
    "AND BDD_DOS.ID_CL=BDD_ONE.ID_CL "+...
    "GROUP BY SEMAINE "
    Merci pour votre aide.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Analyste developpeur
    Inscrit en
    Octobre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste developpeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2017
    Messages : 10
    Points : 21
    Points
    21
    Par défaut
    Hello,

    deux petites choses

    1 - Tu ne devrait pas relier directement ton IHM a ton code, c'est MAL Passe au moins par une variable intermédiaire, (je parle même pas de 3-tiers la ) Si un jour tu dois réutiliser ta requête, ça va te poser des soucis.

    2- La encore, c'est affaire de gout mais si tu récupères ou effectue des recherches régulière sur l'année, le numéro de semaine, etc.... windev te permet de faire des rubriques calculées directement dans ton fichier de BDD. Ca signifie que tu peux créer une rubrique qui calculera automatique l'année de la ligne a partir de ta dateHeure, et une autre pour le numéro de semaine. Si tu les indexes, les recherches sont instantanées et la requête est simplifiée.
    Pas a faire pour tout mais dans ton cas, ca me semble correct.


    ET sinon, enlève ton count et reteste ta requête.

  10. #10
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 038
    Points : 9 347
    Points
    9 347
    Par défaut
    Citation Envoyé par laura_duj Voir le message
    Oui j'ai bien les résultats attendus.

    Exemple :
    201710180740000000

    Voici ma requête "terminée" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ssql="SELECT count(BDD_DOS.REF) as iNbLigne, "+... 
    " WL.DateVersNuméroDeSemaine(BDD_ONE.DATE_ADH) AS SEMAINE "+...
    "FROM BDD_ONE, BDD_DOS "+...
    "WHERE BDD_ONE.DATE_ADH IS NOT NULL "+...
    "AND left(BDD_ONE.DATE_ADH, 4)="+combo_annee..ValeurAffichée+" "+...
    "AND BDD_DOS.DATE_ARG IS NULL "+...
    "AND BDD_DOS.ID_CL=BDD_ONE.ID_CL "+...
    "GROUP BY SEMAINE "
    Merci pour votre aide.
    Parfait.
    Oublions le problème de la requête, c'est solutionné.


    Plutôt que faire ssql = " select "... + " FRom "... + " Where"... , tu peux aussi faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ssql=[
    SELECT count(BDD_DOS.REF) as iNbLigne,  
     WL.DateVersNuméroDeSemaine(BDD_ONE.DATE_ADH) AS SEMAINE
    FROM BDD_ONE, BDD_DOS 
    WHERE BDD_ONE.DATE_ADH IS NOT NULL 
    AND left(BDD_ONE.DATE_ADH, 4)=  %1   
    AND BDD_DOS.DATE_ARG IS NULL 
    AND BDD_DOS.ID_CL=BDD_ONE.ID_CL 
    GROUP BY SEMAINE 
    ]
    ssql = chaineconstruit( ssql, combo_annee..ValeurAffichée)
    A la fin, ta requête sera exactement la même et le résultat sera donc aussi le même. La seule différence, c'est que c'est beaucoup simple pour faire des copier/coller par exemple, et pour la relecture en général.

    Et pour être rigoureux, je ferais même : AND left(BDD_ONE.DATE_ADH, 4)= '%1' au lieu de AND left(BDD_ONE.DATE_ADH, 4)= %1
    Avec la syntaxe que je te propose, ce genre de détail saute aux yeux. Ce n'était pas visible avec la syntaxe initiale.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

Discussions similaires

  1. [SQL] Extraire l'année d'une date à l'aide d'une proc sql
    Par fpolo dans le forum SAS Base
    Réponses: 4
    Dernier message: 01/04/2011, 18h05
  2. [DeskI V5-V6] Extraire l'année d'une date
    Par dufrane dans le forum Débuter
    Réponses: 3
    Dernier message: 15/10/2010, 15h44
  3. Requete JPQL pour extraire l année d une date
    Par zazou19 dans le forum JPA
    Réponses: 5
    Dernier message: 28/07/2010, 15h50
  4. [MySQL] Extraire l'année d'une date MYSQL
    Par fosto dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/04/2010, 16h57
  5. extraire l'année d une date
    Par adelsunwind dans le forum IHM
    Réponses: 3
    Dernier message: 20/08/2008, 17h16

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