Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
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 30/10/2011, 15h39   #1
Membre habitué
 
Avatar de sihammaster
 
Webmaster
Inscription : mai 2009
Messages : 238
Détails du profil
Informations professionnelles :
Activité : Webmaster
Secteur : Finance

Informations forums :
Inscription : mai 2009
Messages : 238
Points : 148
Points : 148
Envoyer un message via MSN à sihammaster
Par défaut nombre de jour entre deux dates sans compter samedi et dimanch

Bonjour,
je voudrais calculer le nombre de jours entre deux dates sans compter samedi et dimanche, j'ai réussi à les compter mais c'est avec les weekends comment puis-je sosutraire les weekends en mettant dans le champ NbrejP, et nbjreR le nombre de jours sans weekends?, voila mon code:
Code :
1
2
3
4
5
6
7
8
9
 
SELECT     dbo.Module.nom_Module, dbo.Fonctionnalite.nom_Fct, dbo.Personne.initiale, dbo.Fonctionnalite.date_DebutP, dbo.Fonctionnalite.date_FinP, 
                      DATEDIFF(day, dbo.Fonctionnalite.date_DebutP, dbo.Fonctionnalite.date_FinP) AS NbreJP, dbo.Fonctionnalite.date_DebutR, dbo.Fonctionnalite.date_FinR, 
                      DATEDIFF(day, dbo.Fonctionnalite.date_DebutR, dbo.Fonctionnalite.date_FinR) AS NbreJR, dbo.Projet.titre_Projet
FROM         dbo.Fonctionnalite INNER JOIN
                      dbo.Module ON dbo.Fonctionnalite.refModule = dbo.Module.id_Module INNER JOIN
                      dbo.Personne ON dbo.Fonctionnalite.refDeveloppeur = dbo.Personne.id INNER JOIN
                      dbo.Projet ON dbo.Module.refProjet = dbo.Projet.id_Projet
ORDER BY dbo.Fonctionnalite.date_DebutP
Merci de m'aider.
sihammaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 14h17   #2
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 467
Points : 2 467
Envoyer un message via Yahoo à zinzineti
Bonjour,

Tu peux utiliser cette fonction à la place de tes DATEDIFF

Code :
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
--=====================================================
 
-- Description : Nombre de jours ouvrés entre deux dates
 
-- Auteur : Etienne ZINZINDOHOUE
 
-- Exemple d'utilisation : 
SELECT dbo.F_NBJOURS_OUVRABLE('20111001','20111031')
 
--=====================================================
 
CREATE FUNCTION dbo.F_NBJOURS_OUVRABLE(@DateDebut DATETIME, @DateFin DATETIME)
 
RETURNS INT AS
 
BEGIN
 
DECLARE @NbJOURS INT ; --Nombre de jours
 
IF (@DateDebut IS NULL OR @DateFin IS NULL) RETURN (0)
 
SET @NbJOURS = 0 ;
 
WHILE (@DateDebut <= @DateFin)
 
BEGIN
 
IF (SELECT @@DATEFIRST)= 1 -- Si le premier jour de la semaine est lundi
 
BEGIN
 
SET @NbJOURS = @NbJOURS + CASE
 
WHEN DATEPART(dw,@DateDebut) BETWEEN 1 AND 5 THEN 1
 
ELSE 0
 
END
 
SET @DateDebut = @DateDebut + 1
 
END
 
IF (SELECT @@DATEFIRST)= 7 -- Si le premier jour de la semaine est dimanche
 
BEGIN
 
SET @NbJOURS = @NbJOURS + CASE
 
WHEN DATEPART(dw,@DateDebut) BETWEEN 2 AND 6 THEN 1
 
ELSE 0
 
END
 
SET @DateDebut = @DateDebut + 1
 
END
 
END
 
RETURN (@NbJOURS)
 
END

Pour plus de détails voir ici

A+
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 17h17   #3
Membre habitué
 
Avatar de sihammaster
 
Webmaster
Inscription : mai 2009
Messages : 238
Détails du profil
Informations professionnelles :
Activité : Webmaster
Secteur : Finance

Informations forums :
Inscription : mai 2009
Messages : 238
Points : 148
Points : 148
Envoyer un message via MSN à sihammaster
Merci.
voila j'ai trouvé une solution:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    CREATE FUNCTION [dbo].[fn_NoofWorkdaysBetweenDates]
    (
        @StartDate DATETIME,
        @EndDate DATETIME
    )
    RETURNS INT
    AS
    BEGIN
    RETURN
    (
        SELECT (DATEDIFF(dd,@startdate,@enddate)/7)*5 +  SUBSTRING(EndWk,DATEDIFF(dd,0,@enddate)%7+1,1)
        FROM ( SELECT 0 AS StartWk,'1234555' AS EndWK UNION ALL SELECT 1,'5123444' UNION ALL SELECT 2,'4512333' UNION ALL
        SELECT 3,'3451222' UNION ALL SELECT 4,'2344111' UNION ALL SELECT 5,'1234500' UNION ALL SELECT 6,'1234550')t
        WHERE StartWk = DATEDIFF(dd,0,@startdate)%7
    );
    END
sihammaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h59.


 
 
 
 
Partenaires

Hébergement Web