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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 68 524 fois - Téléchargée 27 fois

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

Ajouter un commentaire

Commentaires

FENETRES
Messages postés
196
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
Pour le semestre d'une date, voir l'instruction T-SQL ci-dessous.

SELECT CEILING(MONTH(GETDATE())/6)
FENETRES
Messages postés
196
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
Catastrophe... j'ai oublié l'essentiel ! Annule et remplace l'expression précédente pour le calcul d'un semestre d'une date.

SELECT CEILING(MONTH(GETDATE())/6.0)
cs_ankou22
Messages postés
81
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
7 juin 2012
-
Merci ;-)

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.