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

Firebird Discussion :

Ajouter des jours à une date stockée sous forme de chaine


Sujet :

Firebird

  1. #1
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut Ajouter des jours à une date stockée sous forme de chaine
    Bonsoir,

    j'imagine que la question a été posée mille fois, mais soit je n'arrive pas à la formuler, soit je ne sais pas chercher et comme je suis très planté, je me permets de la (re)poser ici :

    je souhaite faire en une seule requête faire un ajout ou une soustraction de jour qui est stockée sous forme "AAAAMMJJ"
    Du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update matable set madate=dateenchaine(conversion_en_date(madate)+3);
    pour ajouter 3 jours
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update matable set madate=dateenchaine(conversion_en_date(madate)-5);
    pour en enlever 5.
    Et bien évidement, sans me retrouver avec des dates improbables genre "20110933" parce que j'ai ajouté 3 jours à une date "20110930"

    D'avance un grand merci pour vos lumières.

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par Christophe Charron Voir le message
    je souhaite faire en une seule requête faire un ajout ou une soustraction de jour qui est stockée sous forme "AAAAMMJJ"
    Du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update matable set madate=dateenchaine(conversion_en_date(madate)+3);
    pour ajouter 3 jours
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update matable set madate=dateenchaine(conversion_en_date(madate)-5);
    pour en enlever 5.
    1) en créant des procédures stockées : voir la FAQ

    2) en créant de fonctions utilisateurs : voir l'exemple de la FAQ avec Delphi
    --
    Philippe.

  3. #3
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    Bonjour,


    1) en créant des procédures stockées : voir la FAQ

    2) en créant de fonctions utilisateurs : voir l'exemple de la FAQ avec Delphi
    --
    Philippe.
    Merci pour la prompte réponse

    c'est ce que je craignais !!
    Je vais me diriger vers les procédures stockées ou vers les triggers, je ne sais pas encore ...
    A votre avis qu'est ce qui est le plus rapide ?

  4. #4
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 715
    Points
    3 715
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    SQL> select substring('20110930' from 1 for 4)||'-'||substring('20110930' from 5 for 2)||'-'||substring('20110930' from 7 for 2) from rdb$database; 
    CONCATENATION              
    ========================== 
    2011-09-30
     
    SQL> select cast(substring('20110930' from 1 for 4)||'-'||substring('20110930' from 5 for 2)||'-'||substring('20110930' from 7 for 2) as date) from rdb$database;
     
           CAST 
    =========== 
    2011-09-30  
     
    SQL> select dateadd(3 day to cast(substring('20110930' from 1 for 4)||'-'||substring('20110930' from 5 for 2)||'-'||substring('20110930' from 7 for 2) as date)) from rdb$database;
     
        DATEADD 
    =========== 
    2011-10-03  
     
    SQL> select dateadd(-5 day to cast(substring('20110930' from 1 for 4)||'-'||substring('20110930' from 5 for 2)||'-'||substring('20110930' from 7 for 2) as date)) from rdb$database;
     
        DATEADD 
    =========== 
    2011-09-25
    cf documentation http://www.firebirdsql.org/file/docu...5-intfunc.html

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Bonjour


    Même réponse que Ph. B.

    Mon interrogation porte sur la formule d'ajout et de soustraction.
    Si ta colonne "madate" est sous le type "DATE", pourquoi ne pas utiliser les fonctions DATEDIFF et DATEADD (cela evite les 30/02/2011 )

  6. #6
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 715
    Points
    3 715
    Par défaut
    pas besoin d'UDF ou de procedure stockée, cf ma réponse
    CCYY-MM-DD est un format de date possible, donc il suffit de transformer CCYYMMDD en CCYY-MM-DD à l'aide de concatenation et substring pour ensuite travailler avec dateadd

  7. #7
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Merci à tous pour ces précisions, explications et exemples.

    Cela ne fonctionne pas pour moi mais j'avais juste un peu omis de préciser que j'étais en firebird 1.5 tellement je pensais que ces fonctions pouvaient être historiquement présentes.

    J'ouvre une autre conversation sur les implications d'une migration d'un firebird 1.5 vers une version plus actuelle ...

  8. #8
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 715
    Points
    3 715
    Par défaut
    Firebird 1.5 n'est plus maintenu
    ceci dit, il suffit d'utiliser addDay à la place de dateadd
    cf
    http://www.firebirdsql.org/file/docu...df-addday.html

  9. #9
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par makowski Voir le message
    pas besoin d'UDF ou de procedure stockée, cf ma réponse
    CCYY-MM-DD est un format de date possible, donc il suffit de transformer CCYYMMDD en CCYY-MM-DD à l'aide de concatenation et substring pour ensuite travailler avec dateadd
    Effectivement, mais côté lisibilité et ré-utilisabilité, tu repasseras...
    --
    Philippe.

  10. #10
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 715
    Points
    3 715
    Par défaut
    ben en même temps la première erreur c'est celui qui stocke des dates dans un champs de type caractères, s'il avait utilisé un champ date, tout aurait été plus simple

Discussions similaires

  1. [MySQL] Ajouter des jours à une date donnée
    Par jiojioforever dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/10/2009, 09h32
  2. Ajouter des jours à une date dans une requête HQL
    Par jojo el merou dans le forum Hibernate
    Réponses: 3
    Dernier message: 30/11/2007, 14h37
  3. [Formulaire] Ajouter des jours à une date
    Par atlantideD dans le forum IHM
    Réponses: 2
    Dernier message: 21/05/2007, 10h07
  4. ajouter des jours à une date
    Par babalastar dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 27/02/2007, 11h39
  5. [HQL] Ajouter des jours à une date
    Par loulou dans le forum Hibernate
    Réponses: 2
    Dernier message: 30/01/2007, 11h22

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