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 :

Fonction jour férié


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 2
    Par défaut Fonction jour férié
    Bonjour à tous,

    J'ai besoin d'une fonction qui retourne si oui ou non (Y ou N) si le jour donné en entrée est un jour férié ou pas :
    USE [master]
    GO
    /****** Object: UserDefinedFunction [dbo].[Ferie] Script Date: 07/29/2009 15:15:31 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER Function [dbo].[Ferie](@jour datetime) returns varchar(1)
    Begin
    declare @JJ int, @mm int, @AA int, @NbOr int, @Epacte int, @PLune datetime, @Paques datetime, @Ascension datetime, @Pentecote datetime;
    set @JJ = Day(@Jour);
    set @mm = Month(@Jour);
    set @AA = Year(@Jour);
    If @JJ = 1 And @mm = 5
    return 'Y' --1 Mai
    If @JJ = 8 And @mm = 5
    return 'Y' --8 Mai
    If @JJ = 14 And @mm = 7
    return 'Y' --14 Juillet
    If @JJ = 15 And @mm = 8
    return 'Y' --15 Août
    If @JJ = 1 And @mm = 11
    return 'Y' --1 Novembre
    If @JJ = 11 And @mm = 11
    return 'Y' --11 Novembre
    If @JJ = 25 And @mm = 12
    return 'Y' --25 Décembre
    set @NbOr = (@AA % 19) + 1
    set @Epacte = (11 * @NbOr - (3 + ((2 + (@AA / 100)) * 3 / 7))) % 30
    set @PLune = convert(datetime,'19/04/' + @AA) - ((@Epacte + 6) % 30)
    If @Epacte = 24
    set @PLune = @PLune - 1
    If @Epacte = 25 And (@AA >= 1900 And @AA < 2000)
    set @PLune = @PLune - 1
    set @Paques = @PLune - datepart(weekday, @PLune) + 7 --Paques
    If @JJ = Day(@Paques) And @mm = Month(@Paques)
    return 'Y'
    set @Ascension = @Paques + 38 --Ascension
    If @JJ = Day(@Ascension) And @mm = Month(@Ascension)
    return 'Y'
    set @Pentecote = @Ascension + 11 --Pentecote
    If @JJ = Day(@Pentecote) And @mm = Month(@Pentecote)
    return 'Y'
    return 'N'
    End
    Elle compile sans erreur mais lorsque je souhaite l'utiliser
    PRINT dbo.Ferie(getdate())
    Cela me retourne une erreur que je n'arrive pas à résoudre :
    Conversion failed when converting the varchar value '19/04/' to data type int.
    J'ai testé avec la fonction cast mais le résultat est le même. En lisant ce genre de problème et avec l'erreur, c'est sûr que c'est un problème de conversion mais je ne trouve pas...

    Si quelqu'un à une idée ou n'importe quelle piste

    Je vous remercie d'avance !

  2. #2
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonsoir,

    Utilisez le format ISO pour vos dates. (AAAMMJJ)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set @PLune = convert(datetime,@AA + '0419',112) - ((@Epacte + 6) % 30)
    ++

Discussions similaires

  1. fonction jours fériés prolèmes
    Par lllhuhdklll dans le forum PL/SQL
    Réponses: 4
    Dernier message: 29/10/2012, 16h46
  2. fonction calcul jours fériés
    Par Daniel MOREAU dans le forum Développement
    Réponses: 1
    Dernier message: 25/11/2009, 09h48
  3. appel de fonction créée pour les jours fériés?
    Par novice06 dans le forum VBA Access
    Réponses: 1
    Dernier message: 27/03/2009, 10h11
  4. Réponses: 6
    Dernier message: 14/09/2008, 15h41
  5. Réponses: 1
    Dernier message: 05/02/2008, 14h36

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