Exercice Langage SQL : Les Fonction (Part 1)
Rédigé par GC Team, Publié le 13 Décembre 2011, Mise à jour le Samedi, 17 Décembre 2022 19:08Participez au vote ☆☆☆☆☆★★★★★
Objet: Travailler avec les Fonction (Partie 1)
Travail à Faire:
- Créer le Code pour la Fonction SQL permettant d'extraire le suffixe d'une chaine de charactères.
- Créer la Fonction d'ajout d'une durée (Année, Mois, Jour, Heure, Minute, Seconde) à une date.
- 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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
--1) 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 -- 2) 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 -- 3) 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 |