Exercice langage SQL corrigé les fonctions (Part I)

Créer le Code pour la Fonction SQL permettant d’extraire le suffixe d’une chaine de charactères.

ALTER FUNCTION  dbo.Fx_RenvoieSuffixe (@CHAINEDONNEE AS VARCHAR(500), @SEPARATEUR AS VARCHAR(50))
RETURNS VARCHAR(500)
BEGIN

-- Déclare les variables locales 
DECLARE @Result VARCHAR(500)
DECLARE @IndexSeparateur INT

-- Assigne les chaines d'origine sans les blancs possibles
SET @Result = RTRIM(LTRIM(@CHAINEDONNEE))
SET @SEPARATEUR = RTRIM(LTRIM(@SEPARATEUR))

-- Recherche si le séparateur existe dans la chaine donnée
SET @IndexSeparateur = CHARINDEX (@SEPARATEUR, @Result)

IF @IndexSeparateur > 0 
-- Si le séparateur existe je fourni tout ce qui est après cette chaine
	SELECT @Result = SUBSTRING(@Result, CHARINDEX (@SEPARATEUR, @Result)+LEN(@SEPARATEUR), LEN(@Result)- CHARINDEX(\ , @Result))
ELSE
	SELECT @Result = @Result

-- Renvoi le résultat
RETURN @Result

END

Créer la Fonction d’ajout d’une durée (Année, Mois, Jour, Heure, Minute, Seconde) à une date.

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

CREATE  FUNCTION [dbo].[AddDateTimeDuree] (@Dt Datetime, @an int=0, @mois int=0, @jour int=0,@heure int=0, @minute int=0, @seconde int=0)  
RETURNS DateTime AS  
BEGIN 

	DECLARE @Ret Datetime

	IF @Dt IS NULL
		SET @Ret = NULL
	ELSE
		SET @Ret =  dateadd(second,isnull(@seconde,0),dateadd(minute,isnull(@minute,0),dateadd(hour,isnull(@heure,0),dateadd(day, isnull(@jour,0), dateadd(month, isnull(@mois,0), dateadd(year, isnull(@an,0), @Dt))))))

	RETURN @Ret
END

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

Créer une fonction qui permet de retrouver la position du premier chiffre d’une chaine.

SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[FN_CHARINDEX_FIRST_NUMERIC] (@NOMDIV nvarchar(30))
RETURNS smallint

AS

BEGIN

	DECLARE @nom nvarchar(30)
	DECLARE @i smallint
	DECLARE @j smallint
	SET @i = 1
	SET @j = 0

	WHILE @i < len(@nomdiv)
	BEGIN
		DECLARE @car nvarchar(1)
		SET @car = (SUBSTRING(@NOMDIV, @i, @i) )
		IF @car IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0')
		BEGIN
			SET @j = @i
			BREAK
		END
		ELSE 
			SET @i = @i + 1
	END

RETURN @j
END

-- Ou Bien :

CREATE FUNCTION [dbo].[FN_CHARINDEX_FIRST_NUMERIC_V2] (@NOMDIV nvarchar(30))
RETURNS smallint

AS

BEGIN

  RETURN PATINDEX ('%[0123456789]%', @NOMDIV)

END

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *