Sql server - fonctions de conversion d'une date (convert, datepart)

Contenu du snippet

Microsoft SQL Server (UDF)
Exemples très simples de conversion d'une date à partir de CONVERT et DATEPART.

Source / Exemple :


Create Function [dbo].[fctDateToStr] (@Date DateTime) 
Returns Char(10) As 
/* 
   Cette fonction de conversion retourne une chaîne de caractères 
   contenant la date selon le format "dd/mm/yyyy"; 

  • /
Begin Return Convert(Char(10), @Date,103) End -------------------------------------------------------------------------------------------------------- Create Function [dbo].[fctTimeToStr] (@Date DateTime) Returns Char(8) As /* Cette fonction de conversion retourne une chaîne de caractères contenant l'heure selon le format "hh:mm:ss";
  • /
Begin Return Convert(Char(8), @Date,108) End -------------------------------------------------------------------------------------------------------- Create Function [dbo].[fctDateTimeToStr] (@Date DateTime) Returns Char(19) As /* Cette fonction de conversion retourne une chaîne de caractère contenant la date et l'heure selon le format "dd/mm/yyyy hh:mm:ss".
  • /
Begin Return Convert(Char(10), @Date,103) + ' ' + Convert(Char(8), @Date,108) End -------------------------------------------------------------------------------------------------------- Create Function [dbo].[fctFormatDateTime] (@Format As Varchar(19), @Date DateTime) Returns Varchar(19) As /* Cette fonction de conversion 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. Exemples d'utilisation : -- Appel ; Résultat ; Format -- Select dbo.fctFormatDateTime('dd/mm/yyyy', Cast('22/12/2005 11:39:00' As DateTime)) ; 22/12/2005 ; Date sans heure -- Select dbo.fctFormatDateTime('dd/mm/yyyy hh:mm:ss', Cast('22/12/2005 11:39:00' As DateTime)) ; 22/12/2005 11:39:00 ; Date et heure -- Select dbo.fctFormatDateTime('yyyy-mm-dd', Cast('22/12/2005 11:39:00' As DateTime)) ; 2005-12-22 ; Date ODBC canonique sans l'heure -- Select dbo.fctFormatDateTime('yyyy-mm-dd hh:mm:ss', Cast('22/12/2005 11:39:00' As DateTime)) ; 2005-12-22 11:39:00 ; Date ODBC canonique avec l'heure -- Select dbo.fctFormatDateTime('dd mmm yyyy', Cast('22/12/2005 11:39:01.365' As DateTime)) ; 22 déc 2005 ; Date abrégée sans heure -- Select dbo.fctFormatDateTime('dd mmmm yyyy', Cast('22/12/2005 11:39:01.365' As DateTime)) ; 22 décembre 2005 ; Date complète sans heure -- Select dbo.fctFormatDateTime('mmm', Cast('22/12/2005 11:39:01.365' As DateTime)) ; déc ; Mois abrégé -- Select dbo.fctFormatDateTime('hh:mm:ss', Cast('22/12/2005 11:39:01.365' As DateTime)) ; 11:39:01 ; Heure sans les millisecondes
  • /
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 -------------------------------------------------------------------------------------------------------- Create Function [dbo].[fctDateOf] (@Dte DateTime) Returns Datetime -- Retourne l'information de date en attribuant la valeur 0 (minuit) à la partie heure. Begin Return Convert(DateTime, Floor(Convert(Float, @Dte))); end -------------------------------------------------------------------------------------------------------- Create Function [dbo].[fctTimeOf] (@Dte DateTime) Returns DateTime -- Retourne l'information d'heure en attribuant la valeur 0 (01/01/1900) à la partie date. Begin Return Convert(DateTime, Convert(Binary(4),@Dte)); End -------------------------------------------------------------------------------------------------------- Create Function [dbo].[fctQuarterOf] (@Dte DateTime) Returns Tinyint -- Retourne le trimestre d'une date. -- Exemple d'utilisation : -- Select dbo.fctQuarterOf(getdate()) Begin Return DatePart(Quarter, @Dte); End -------------------------------------------------------------------------------------------------------- Create Function [dbo].[fctSemesterOf] (@Dte DateTime) Returns Tinyint -- Retourne le semestre d'une date. -- Exemple d'utilisation : -- Select dbo.fctSemesterOf(getdate()) Begin Return Ceiling(Month(@Dte)/6.0); End -------------------------------------------------------------------------------------------------------- Create Function [dbo].[fctWeek] (@Dte DateTime) Returns Int As Begin -- Retourne le n° de semaine ISO (bibliographie : http://msdn2.microsoft.com/en-US/library/aa258261(SQL.80).aspx) Declare @Week Int ; Set @Week= DatePart(wk, @Dte) + 1 - DatePart(wk, Cast(DatePart(yy, @Dte) As Char(4)) + '0104') ; -- Les journées du 1er au 3 janv. peuvent appartenir à l'année précédente If (@Week=0) Set @Week=dbo.fctWeek(Cast(DatePart(yy, @Dte) - 1 As Char(4)) + '12'+ Cast(24+DatePart(Day, @Dte) As Char(2))) + 1 ; -- Les journée du 29 au 31 déc. peuvent appartenir à l'année suivante If ((DatePart(mm, @Dte)=12) And ((DatePart(dd, @Dte) - DatePart(dw, @Dte))>= 28)) Set @Week=1 ; Return(@Week) ; End

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.