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 :

Ma première fonction


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut Ma première fonction
    Bonjour,

    Je galère sur une fonction qui doit me renvoyer une chaine style "2010 2011" en lui passant une date.
    Si le mois de cette date est octobre-novembre ou décembre la fonction doit retourner "AAAA AAAA+1"
    et sinon mois de Janvier à septembre la fonction doir retourner
    "AAAA-1 AAAA"

    Ma fonction retourne "3" ???? quelque soit la date

    Merci pour votre aide.
    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
    use DATAWH
    go
    CREATE FUNCTION dbo.EXERCICE(@ma_date date)
    RETURNS varchar
    AS
    BEGIN
    	DECLARE @y1 int
    	DECLARE @y2 int
    	DECLARE @EXO varchar	
    	IF (MONTH(@ma_date) >= 10 )
    	BEGIN
    		SET @y1 = year(@ma_date)
    		SET @y2 = year(@ma_date)+1
    	END
    	ELSE
    	BEGIN
    		SET @Y1 = year(@ma_date)-1
    		SET @y2 = year(@ma_date)
    	END
    	SET @EXO=CAST(@y1 as varchar) + '-' + CAST(@y2 as varchar)
    	RETURN(@EXO)
    END
    GO

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Essayez avec cette précision :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECLARE @EXO varchar(9)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut Pas mieux
    Pas de changement, après un update utilisant la fonction :

    update BCPEDEVWH
    set BCPEDEVWH.EXERCICE_E = dbo.EXERCICE(BCPEDEVWH.DATE_E)
    go

    DATE_E MOIS_E EXERCICE_E
    2012-03-12 3 2
    2012-03-26 3 2
    2012-02-27 2 2

    ...

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Étrange, je l'avais testé comme ceci :
    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
    BEGIN
    	DECLARE @y1 int
    	DECLARE @y2 int
    	DECLARE @EXO varchar 
    	DECLARE @EXO2 varchar(9)	
    	DECLARE @ma_date date
    	SET @ma_date = '2012-03-12'
    	IF (MONTH(@ma_date) >= 10 )
    	BEGIN
    		SET @y1 = year(@ma_date)
    		SET @y2 = year(@ma_date)+1
    	END
    	ELSE
    	BEGIN
    		SET @Y1 = year(@ma_date)-1
    		SET @y2 = year(@ma_date)
    	END
    	SET @EXO=CAST(@y1 AS varchar) + '-' + CAST(@y2 AS varchar)
    	SET @EXO2=CAST(@y1 AS varchar) + '-' + CAST(@y2 AS varchar)
    	SELECT @Y1, @Y2, @EXO, @EXO2
    END
     
     
    ----------- ----------- ---- ---------
    2011        2012        2    2011-2012

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    Personnellement je typerais tous les varchar avec une taille.
    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
    CREATE FUNCTION dbo.EXERCICE(@ma_date date)
    RETURNS varchar(10)
    AS
    BEGIN
    	DECLARE @y1 int
    	DECLARE @y2 int
    	DECLARE @EXO varchar(10)	
    	IF (MONTH(@ma_date) >= 10 )
    	BEGIN
    		SET @y1 = year(@ma_date)
    		SET @y2 = year(@ma_date)+1
    	END
    	ELSE
    	BEGIN
    		SET @Y1 = year(@ma_date)-1
    		SET @y2 = year(@ma_date)
    	END
    	SET @EXO=CAST(@y1 AS varchar(4)) + '-' + CAST(@y2 AS varchar(4))
    	RETURN(@EXO)
    END
    Je n'ai pas testé, je suis chez moi sans sql server.
    a+
    Soazig

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut C'est ça !
    Merci Waldar et Soazig

    Il faut effectivement typer la valeur de retour en varchar (X) et non varchar seul au niveau du DECLARE et du RETURNS :
    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
    USE [DATAWH]
    GO
    /****** Object:  UserDefinedFunction [dbo].[EXERCICE]    Script Date: 07/24/2012 09:14:33 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER FUNCTION [dbo].[EXERCICE](@ma_date date)
    RETURNS varchar (9)
    AS
    BEGIN
    	DECLARE @y1 int
    	DECLARE @y2 int
    	DECLARE @EXO2 varchar(9)
    	IF (MONTH(@ma_date) >= 10 )
    	BEGIN
    		SET @y1 = year(@ma_date)
    		SET @y2 = year(@ma_date)+1
    	END
    	ELSE
    	BEGIN
    		SET @Y1 = year(@ma_date)-1
    		SET @y2 = year(@ma_date)
    	END
    	SET @EXO2=CAST(@y1 as varchar) + '-' + CAST(@y2 as varchar)
    	RETURN(@EXO2)
    END

Discussions similaires

  1. Première fonction avec jquery
    Par yann18 dans le forum jQuery
    Réponses: 4
    Dernier message: 27/05/2009, 09h18
  2. [Smarty] Ma première Fonction
    Par PseT34 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 06/08/2008, 16h37
  3. Première fonction MySQL
    Par RaphAstronome dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 03/09/2007, 18h48
  4. Réponses: 4
    Dernier message: 04/03/2007, 21h39

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