Bonjour,
J'ai un gros problème de date dans une bdd.
J'ai deux tables:
Table_Client :
-Num_palette (Clé primaire)
-ID_Prépa,
-Date (format numéric(8,0)) => pas le choix, impossible de le mettre au format date
-Heure (format numéric(8,0)) => pas le choix, impossible de le mettre au format datetime
-Qte
Table_Preparateur:
-ID_Prépa, clé primaire
-Date (format numéric(8,0)) , clé primaire
-Qt_totale
Scénario: les préprateurs (3 equipes de 7heures Tps ouvertures, equipe matin (50000<Heure<120000), equipe AM (1200000<Heure<190000), equipe nuit (190000<Heure<020000)).
Dans table prépa, je veux lister la Qt_totale (somme QTE de la table preparteur) qu'un preparateur fait par jour (Date).
Le problème est pour l'equipe de nuit.
En fait j'ai deux lignes dans Table_Preparateur car la nuit empiète sur la journée du lendemain.
Je cherche à changer la date dans Table_Client.
Stratégie : J'espère réaliser une fonction scalaire avec Heure et Date en paramètre, je regarde Heure puis compare si elle est comprise entre 000000 et 020000 si oui je prends la variable DATE et je lui affecte moins 1 jours.
Je pense que c'est réalisable mais le problème est le format numéric de date, si je fais -1, je risque d'avoir des pb avec les changements de mois.
20140101-000001=20140100 => tiens un nouveau jour dans le calendrier.
J'espère qu'il existe une fonction qui lorsque je veux retrancher -1 jours, j'obtiens une bonne date.
Peut être faut il alors convertir au préalable le format de date. => Qui doit se faire absolument à l'intérieur de la fonction scalaire.
Donc j'ai DATE et HEURE en paramètre
Je convertis DATE
Je compare l'heure, si 00000<heure<020000 alors return DATE= DATE-1 jours
C'est possible?
EDIT: Un CAST puis un TODATETIMEOFFSET?
EDIT : J'ai trouvé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Select Dateprep, DATEADD(day,-1,Dateprep) From ( SELECT CONVERT(DATE, CONVERT(CHAR(8),Date)) as Dateprep From Table_Client
Partager