Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SQL SERVER - FONCTIONS DE CONVERSION D'UNE DATE (CONVERT, DATEPART)


Information sur la source

Catégorie :Fonctions Classé sous : fonction, convert, conversion, date, format Niveau : Débutant Date de création : 04/05/2005 Date de mise à jour : 05/11/2007 10:01:45 Vu : 19 862

Note :
Aucune note

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

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

Source

  • 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
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

Historique

23 décembre 2005 15:24:49 :
Ajout d'une fct de conversion de date similaire à la fct Delphi simplifiée
10 janvier 2006 13:41:37 :
Rajout des formats : - mois abrégé "mmm" - date abrégée "dd mmm yyyy" - date complète "dd mmmm yyyy"
23 février 2006 16:07:39 :
Suppression d'un cas (select case mois 10) traité deux fois dans la fonction fctFormatDatetime. Plus de 2000 connexions et aucune remarque sur ce doublon ; c'est l'hibernation !
23 août 2007 18:31:31 :
Ajout de la fonction « DateOf » (astuce Nix) similaire à la fonction éponyme en Delphi.
23 août 2007 18:33:01 :
Erreur de saisie
24 août 2007 09:18:02 :
ajout préfixe
28 août 2007 14:19:33 :
Ajout de la fontion nommée « fctTimeOf ».
28 août 2007 14:24:10 :
Correction incrémentation
30 août 2007 09:59:56 :
Correction titre après ajouts
30 août 2007 10:35:11 :
Correction
30 août 2007 11:08:31 :
Simplification de la fctTimeOf (cf. Skweeky)
04 septembre 2007 10:23:52 :
Ajout de la fctWeek (n° ISO de semaine, support Microsoft)
04 septembre 2007 10:31:43 :
MAJ du titre + incrémentation
05 novembre 2007 09:58:48 :
Ajout du trimestre et du semestre d'une date Contre toute attente, ces exemples sont encore utiles (cf. forum).
05 novembre 2007 10:01:45 :
Ajout du trimestre et du semestre d'une date Contre toute attente, ces exemples sont encore utiles (cf. forum).

Commentaires et avis

signaler à un administrateur
Commentaire de FENETRES le 04/09/2007 15:54:37

Pour le semestre d'une date, voir l'instruction T-SQL ci-dessous.

SELECT CEILING(MONTH(GETDATE())/6)

signaler à un administrateur
Commentaire de FENETRES le 04/09/2007 15:58:59

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)

signaler à un administrateur
Commentaire de ankou22 le 04/09/2007 16:08:27

Merci  ;-)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Supprimer une date antérieure à une autre [ par billou_13 ] Bonjour, Alors, voila je dois faire une requête SQL permettant de supprimer toutes les informations d'une table où les dates seraient ant&# Date format... [ par elpens ] Bonjour,j'ai quelques procedures stockees qui utilisent des dates. Mon problème (si on peux appeler cela un problème), est que je ne sais pa probleme d'ecriture de fonction [ par cudenetf ] bonjour,j'essaie d'ecrire une fonction (qui sert a comparer 2 dates de 2 datetime) mais j'ai un message d'erreurvoici la fonction : create function me Conversion de dates [ par Chatbour ] Salut à tous je voudrais savoir s'il existe une fonction Access qui convertie les date à l'anglaise (#mois-jour-année#) au format français (#jour-mois Déclaration de variable avec format de date [ par Creat ] Bonjour,   J'aimerais savoir s'il est possible de déclarer une variable date avec un format bien précis.  Je m'explique, Requête SQL : date au format américain [ par Molenn ] Bonjour, J'ai longtemps hésité entre le forum VB et celui SQL ... J'espère avoir fait le bon choix Je pose vite fait mon problème :Une base SQL Server probleme de date [ par romainbisson ] Bonjour,je souhaite recuperer la date en SQL,avec la fonction curtime(), je recuper l'heure donc c'est bonmaintenant avec la fonction curdate(), je re convert string to date [ par sofiesofie ] salut,j'ai une table "matable"(num, date) tel que date de type datetime.dans ma formulaire la date est de type string (string d="24/05/2008").pour fai pb insert date dans access [ par hawlk ] Bonjour,A partir d'excel, je fais une requete pour remplir une base access. Je suis embeté avec un champs.Le champ "date", il est au format date (abré Format date [ par boumbo73 ] Bonjour, J'ai une question toute bête.dans ma table j'ai une colonne crdate avec les données de ce type : 2008-08-28 13:45:00J'aimerais faire une requ


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.