Précédent   Forum des professionnels en informatique > Bases de données > Firebird
Firebird Forum d'entraide sur le SGBD Firebird. Avant de poster -> F.A.Q Firebird, Tutoriels
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/09/2011, 23h14   #1
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
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 : 768
Points : 492
Points : 492
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 :
UPDATE matable SET madate=dateenchaine(conversion_en_date(madate)+3);
pour ajouter 3 jours
ou
Code :
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.
__________________
Cordialement,
Christophe Charron
Pour consulter mon site professionnel, vous pouvez cliquer sur le bouton prévu à cet effet, juste sous la signature .
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 00h14   #2
Membre chevronné
 
Philippe
Inscription : avril 2002
Messages : 451
Détails du profil
Informations personnelles :
Nom : Philippe
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 451
Points : 678
Points : 678
Envoyer un message via ICQ à Ph. B.
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 :
UPDATE matable SET madate=dateenchaine(conversion_en_date(madate)+3);
pour ajouter 3 jours
ou
Code :
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 00h32   #3
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
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 : 768
Points : 492
Points : 492
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 ?
__________________
Cordialement,
Christophe Charron
Pour consulter mon site professionnel, vous pouvez cliquer sur le bouton prévu à cet effet, juste sous la signature .
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 08h17   #4
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 213
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2002
Messages : 2 213
Points : 3 315
Points : 3 315
Code :
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
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 08h18   #5
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
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 )
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 08h30   #6
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 213
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2002
Messages : 2 213
Points : 3 315
Points : 3 315
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
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 10h10   #7
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
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 : 768
Points : 492
Points : 492
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 ...
__________________
Cordialement,
Christophe Charron
Pour consulter mon site professionnel, vous pouvez cliquer sur le bouton prévu à cet effet, juste sous la signature .
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 13h05   #8
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 213
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2002
Messages : 2 213
Points : 3 315
Points : 3 315
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
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 14h54   #9
Membre chevronné
 
Philippe
Inscription : avril 2002
Messages : 451
Détails du profil
Informations personnelles :
Nom : Philippe
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 451
Points : 678
Points : 678
Envoyer un message via ICQ à Ph. B.
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2011, 07h38   #10
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 213
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2002
Messages : 2 213
Points : 3 315
Points : 3 315
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
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h45.


 
 
 
 
Partenaires

Hébergement Web