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

Développement SQL Server Discussion :

Calculer une différence de datetime


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 35
    Par défaut Calculer une différence de datetime
    Bonjour,
    j'ai deux tables:
    buisness_hours:dans la quelle de définie les heures de travail pour les jours de la semaine.
    Buisness_holidays:dans la quelle de définie les jours non travaillé.
    l'objectif c'est de créer une procédure sql pour calculer la différence entre deux datetime donnée en minute on tenant compte de l'horaire du jour et les jours non ouvrable.
    vous trouverez ci-joint les deux tables(capture)

    Table buisness_hours:

    Nom : Buisness_hours.png
Affichages : 255
Taille : 4,4 Ko

    Table Holidays:

    Nom : holidays.png
Affichages : 259
Taille : 12,4 Ko


    merci d'avance.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Bonjour,

    Qu'as-tu déjà testé comme requêtes ?
    Où rencontres-tu un problème ?
    • Une erreur d'exécution ? Quel est le message associé ?
    • Une résultat erroné ? Quel résultat obtenu ? Quel résultat attendu ? Avec quelles données ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 35
    Par défaut
    salut,
    j'ai essayer plusieurs codes,mais voici le dernier
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    DECLARE @DateFrom DATETIME = '2021-03-01 07:27:48.000';
    DECLARE @DateTo DATETIME = '2021-03-04 12:12:58.000';
     
    --Working time
    DECLARE @WTFrom TIME = '07:00';
    DECLARE @WTTo TIME = '15:00';
     
    DECLARE @minCount BIGINT
     
    -- Holidays
    IF (OBJECT_ID(N'tempdb..#Holiday', N'U') IS NOT NULL)
    	DROP TABLE #Holiday;
     
    CREATE TABLE #Holiday (holiday DATE)
    INSERT INTO #Holiday VALUES ('20130101'), ('20130221');
     
    --Date ranges
    IF (DATEDIFF(HOUR, @DateFrom, @DateTo) > 12) 
    BEGIN
    	WITH CTE AS
    	(
    		SELECT @DateFrom AS DateVal
    		UNION ALL
    		SELECT DATEADD(HOUR, 1, DateVal)
    		FROM CTE
    		WHERE DateVal < DATEADD(HOUR, -1,@DateTo)
    	)
    	SELECT DATEDIFF(minute, MIN(CTE.DateVal), MAX(CTE.DateVal))
    	FROM CTE 
    	WHERE (CAST(CTE.DateVal AS time) > @WTFrom AND CAST(CTE.DateVal AS time) < @WTTo) AND DATEPART(dw, CTE.DateVal) NOT IN (1, 7) AND NOT EXISTS (SELECT * FROM #Holiday AS H WHERE H.holiday = CTE.DateVal)
    	OPTION (MAXRECURSION 0);
    END;
    ELSE 
    BEGIN
    	WITH CTE AS
    	(
    		SELECT @DateFrom AS DateVal
    		UNION ALL
    		SELECT DATEADD(MINUTE, 1, DateVal)
    		FROM CTE
    		WHERE DateVal < DATEADD(MINUTE, -1,@DateTo)
    	)
    	SELECT DATEDIFF(minute, MIN(CTE.DateVal), MAX(CTE.DateVal))
    	FROM CTE 
    	WHERE (CAST(CTE.DateVal AS time) > @WTFrom AND CAST(CTE.DateVal AS time) < @WTTo) AND DATEPART(dw, CTE.DateVal) NOT IN (1, 7) AND NOT EXISTS (SELECT * FROM #Holiday AS H WHERE H.holiday = CTE.DateVal)
    	OPTION (MAXRECURSION 0);
    END;

    mon objectif c'est que cette fonction doit pointer sur la table Buisness_Hours pour récupérer l'horaire du jour

Discussions similaires

  1. [XL-MAC 2016] Calculer une différence en fonction du X cocher ecxel
    Par dubdub87000 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/02/2019, 23h29
  2. [AC-2003] Calculer une différence entre 2 enregistrements
    Par yannaka dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 01/02/2012, 12h19
  3. Calculer une différence entre deux dates
    Par attif0709 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/04/2010, 12h06
  4. Réponses: 3
    Dernier message: 19/09/2008, 10h35
  5. [Time] comment calculer une différence entre deux Time?
    Par adil_vpb dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 13/03/2007, 17h02

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