Exercice Langage SQL : Convertir une date à partir de CONVERT et DATEPART
Rédigé par GC Team, Publié le 14 Décembre 2011, Mise à jour le Mardi, 30 Novembre 1999 00:00Suite à l'exercice de Fonctions
Objectif :
Créer des Fonctions en SQL
Travail à faire:
Réaliser les requêtes suivantes :
Requête 1 : Fonction de conversion qui retourne une chaîne de caractères contenant la date selon le format "dd/mm/yyyy";
Requête 2 : Fonction de conversion qui retourne une chaîne de caractères contenant l'heure selon le format "hh:mm:ss";
Requête 3 : Fonction de conversion qui retourne une chaîne de caractère contenant la date et l'heure selon le format "dd/mm/yyyy hh:mm:ss".
Requête 4 : Fonction de conversion qui retourne une chaîne de caractère au format indiqué.
-
- Réduit à l'essentiel le nombre de formats de conversion peut être complété à volonté.
- Retourne "Null" si le format saisi est incorrect ou non défini.
Requête 5 : Fonction qui retourne l'information de date en attribuant la valeur 0 (minuit) à la partie heure.
Requête 6 : Fonction qui retourne l'information d'heure en attribuant la valeur 0 (01/01/1900) à la partie date.
Requête 7 : Fonction qui retourne le trimestre d'une date
Requête 8 : Fonction qui retourne le semestre d'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 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 |
Requête 1 CREATE FUNCTION [dbo].[fctDateToStr] (@Date DateTime) Returns Char(10) AS Begin RETURN Convert(Char(10), @Date,103) End Requête 2 : CREATE FUNCTION [dbo].[fctTimeToStr] (@Date DateTime) Returns Char(8) AS Begin RETURN Convert(Char(8), @Date,108) End Requête 3 : CREATE FUNCTION [dbo].[fctDateTimeToStr] (@Date DateTime) Returns Char(19) AS Begin RETURN Convert(Char(10), @Date,103) + ' ' + Convert(Char(8), @Date,108) End Requête 4 : CREATE FUNCTION [dbo].[fctFormatDateTime] (@Format AS Varchar(19), @Date DateTime) Returns Varchar(19) AS Begin RETURN Case @Format When 'dd/mm/yyyy' Then Convert(Char(10), @Date,103) When 'yyyy-mm-dd' Then Convert(Char(10), @Date, 120) When 'yyyy-mm' Then Convert(Char(7), @Date, 120) When 'dd/mm/yyyy hh:mm:ss' Then Convert(Char(10), @Date,103) + ' ' + Convert(Char(8), @Date,108) When 'yyyy-mm-dd hh:mm:ss' Then Convert(Char(19), @Date, 120) When 'dd mmm yyyy' Then Case Month(@Date) When 4 Then Cast(Day(@Date) AS Varchar(2)) + ' ' + LEFT(DateName(Month, @Date), 3) + ' ' + Cast(Year(@Date) AS Char(4)) When 5 Then Cast(Day(@Date) AS Varchar(2)) + ' ' + LEFT(DateName(Month, @Date), 3) + ' ' + Cast(Year(@Date) AS Char(4)) When 10 Then Cast(Day(@Date) AS Varchar(2)) + ' ' + LEFT(DateName(Month, @Date), 3) + ' ' + Cast(Year(@Date) AS Char(4)) When 11 Then Cast(Day(@Date) AS Varchar(2)) + ' ' + LEFT(DateName(Month, @Date), 3) + ' ' + Cast(Year(@Date) AS Char(4)) When 12 Then Cast(Day(@Date) AS Varchar(2)) + ' ' + LEFT(DateName(Month, @Date), 3) + ' ' + Cast(Year(@Date) AS Char(4)) Else Cast(Day(@Date) AS Varchar(2)) + ' ' + LEFT(DateName(Month, @Date), 4) + ' ' + Cast(Year(@Date) AS Char(4)) End When 'dd mmmm yyyy' Then Cast(Day(@Date) AS Varchar(2)) + ' ' + DateName(Month, @Date) + ' ' + Cast(Year(@Date) AS Char(4)) When 'mmm' Then Case Month(@Date) When 4 Then LEFT(DateName(Month, @Date), 3) When 5 Then LEFT(DateName(Month, @Date), 3) When 10 Then LEFT(DateName(Month, @Date), 3) When 11 Then LEFT(DateName(Month, @Date), 3) When 12 Then LEFT(DateName(Month, @Date), 3) Else LEFT(DateName(Month, @Date), 4) End When 'hh:mm:ss' Then Convert(Char(8), @Date,108) End End Requête 5 : CREATE FUNCTION [dbo].[fctDateOf] (@Dte DateTime) Returns Datetime Begin RETURN Convert(DateTime, Floor(Convert(Float, @Dte))); end Requête 6 : CREATE FUNCTION [dbo].[fctTimeOf] (@Dte DateTime) Returns DateTime Begin RETURN Convert(DateTime, Convert(BINARY(4),@Dte)); End Requête 7 CREATE FUNCTION [dbo].[fctQuarterOf] (@Dte DateTime) Returns Tinyint Begin RETURN DatePart(Quarter, @Dte); End Requête 8 : CREATE FUNCTION [dbo].[fctSemesterOf] (@Dte DateTime) Returns Tinyint Begin RETURN Ceiling(Month(@Dte)/6.0); End |