Bonjour,

J'ai créé une fonction à l'aide de certaine personnes sur ce forum

la voici :

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
CREATE FUNCTION datediff_ouvre
(
@F_DATE AS datetime,
@L_DATE AS datetime
)
returns integer
AS
begin
Declare @NB integer
Declare @SEC integer
Declare @SEC_DEB integer
Declare @SEC_FIN integer
Declare @F_DATE_T datetime
Declare @L_DATE_T datetime
 
SET @F_DATE_T = dateadd(day,0,convert(varchar,@F_DATE,103)) -- Enleve les heures
SET @L_DATE_T = dateadd(day,0,convert(varchar,@L_DATE,103)) -- Enleve les heures
 
SET @SEC_DEB = datediff(second,@F_DATE,dateadd(hour,19,@F_DATE_T))
SET @SEC_FIN = datediff(second,dateadd(hour,8,@L_DATE_T),@L_DATE)
SET @NB = 0
 
while datediff(dd, @F_DATE_T,@L_DATE_T) > 0
BEGIN
		IF datepart(dw, @F_DATE_T) NOT IN (6,7)
			SET @NB = @NB + 1
		SET @F_DATE_T = dateadd(dd,1,@F_DATE_T)
END
IF @NB > 0
	SET @NB = @NB - 1
 
SET @NB = @NB*39600
 
If datediff(dd, @F_DATE_T,@L_DATE_T) = 0
		SET @SEC = datediff(second,@F_DATE,@L_DATE)
 
IF datediff(dd, @F_DATE_T,@L_DATE_T) <> 0
		SET @SEC = @NB + @SEC_DEB + @SEC_FIN
 
RETURN @SEC
le résultat retourné ne correspond pas a ce que je veux pourtant quand je teste séparément les variables @NB, @SEC_DEB et @SEC_FIN j'ai bien ce que je veux

Exemple quand je teste séparément :
@NB me retourne 118800
@SEC_DEB me retourne 38050
@SEC_FIN me retourne 24111

mais @SEC qui est @NB + @SEC_DEB + @SEC_FIN ne me retourne pas 180961

Et si je remplace "RETURN @SEC" par "RETURN @NB + @SEC_DEB + @SEC_FIN" ca marche. Mais j'ai vraiment besoin de @SEC parce que c'est le résultat d'un IF

Et là je ne comprends plus ???