Créer le Code pour la Fonction SQL permettant d’extraire le suffixe d’une chaine de charactères.
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 | 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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.
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 41 42 43 44 45 | 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 |