Probleme d'ecriture de fonction

Signaler
Messages postés
448
Date d'inscription
mardi 20 septembre 2005
Statut
Membre
Dernière intervention
26 juillet 2012
-
Messages postés
259
Date d'inscription
mercredi 3 mai 2006
Statut
Modérateur
Dernière intervention
11 janvier 2010
-
bonjour,
j'essaie d'ecrire une fonction (qui sert a comparer 2 dates de 2 datetime) mais j'ai un message d'erreur
voici la fonction :

 create function meme_date(
 @date1 datetime,
 @date2 datetime
 )
 returns bit
 as
 begin
 if 
(
day(@date1)=day(@date2)
 and month(@date1)=month(@date2)
 and year(@date1)=year(@date2)
)
 

 return 1

 else

 return 0

 end
 go

mais j'ai un message d'erreur qui est le suivant:
 Msg 455, Level 16, State 2, Server T43P\SQLEXPRESS, Procedure meme_date, [...]
The last statement included within a function must be a return statement.

voila,

c ma premiere fonction ecrite en sql et je ne vois pas ce qui manque

Merci

et je sais pas comment l'uliser apres
 (la g rajouté return 1 juste vaangt le dernier end et ca a l'air de marcher (enfin d'enregistrer la function meme si je sais pas si c bon)
j'ai essayer de faire

select * from table1 where meme_date(date,'11/11/2006')
go

mais ca marche pas

meme_date n'est pas built-in function...

Comment faire?

help!!

7 réponses

Messages postés
259
Date d'inscription
mercredi 3 mai 2006
Statut
Modérateur
Dernière intervention
11 janvier 2010
7
Pour lui la fonction doit se finir par un return hors du bloc IF, dans ce cas la fonction écrite comme celà :

create
function meme_date
(@date1
datetime, @date2
datetime)
returns
bit

as

begin

if
(

day

(@date1
)=day(@date2
)

and
month(@date1
)=month(@date2
)

and
year(@date1
)=year(@date2
))

      return 1

return 0

endgo

Fonctionnera à l'identique mais ne renvoie pas d'érreur comme RETURN 0 n'est plus dans le ELSE.

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
Messages postés
448
Date d'inscription
mardi 20 septembre 2005
Statut
Membre
Dernière intervention
26 juillet 2012
2
ok merci,
mais j'ai toujours le problem que je ne sais pas comment l'utiliser...
 si j'essaie de faire

select * from table1 where meme_date(date,'11/11/2006')
go

meme_date n'est pas built-in function...

c quoi l'astuce?
Messages postés
259
Date d'inscription
mercredi 3 mai 2006
Statut
Modérateur
Dernière intervention
11 janvier 2010
7
Comme celà :

select * from table1 where dbo.meme_date(date,'11/11/2006')

Attention au nom de champ 'date' n'est pas une très bonne idée... Et attention au format de date, plutôt '20061111' que '11/11/2006'

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
Messages postés
448
Date d'inscription
mardi 20 septembre 2005
Statut
Membre
Dernière intervention
26 juillet 2012
2
ben ce coup ci il a l'air de prendre en compte la fonction par contre j'obtiens ce message d'erreur


Msg 4145, Level 15, State 1, Server T43P\SQLEXPRESS, Line 1
An expression of non-boolean type specified in a context where a condition is expected, near ')'.
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
37
Salut

N'est pas un truc du genre
select * from table1 where dbo.meme_date(date,'11/11/2006') = 1

Car le where ne c'est pas avoir quoi ce comparer.
Messages postés
448
Date d'inscription
mardi 20 septembre 2005
Statut
Membre
Dernière intervention
26 juillet 2012
2
ah oui ok merci
je pensais que bit remplacait le type booleen en sql
on peut pas avoir directement de type booleen?
Messages postés
259
Date d'inscription
mercredi 3 mai 2006
Statut
Modérateur
Dernière intervention
11 janvier 2010
7
Oui, j'avais oublié le = 1

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration