Lorsque l'on travail avec des données de type date/heure (datetime, datetime2, smalldatetime, ...) la conversion vers la chaine de caractères n'est pas tjrs facile surtout si le format par défaut n'est pas présent dans les style de conversions porposés en standard par SQL Server avec la fonction CONVERT.
Je propose donc la fonction to_char (eh bien il y a bien un inspiration Oracle) qui accepte en paramètre le format de date que l'on souhaite obtenir ainsi qu'une donnée de type datetime. Il est facile d'adapter la fonction à accepter d'autre type de données comme datetime2 en modifiant le type du pramètre.
Pour positionner les éléments de dates exactement comme on le souhaite dans la chaine de caractères généré, les formats suivants sont définis
| Format | Signification |
|---|---|
| YYYY | année |
| numéro du trimestre | |
| MM | numéro du mois |
| MONTH | nom du mois |
| DD | Numéro du jour dans le mois |
| DY | Numéro du jour dans l'année |
| WW | Numéro du jour dans la semaine |
| DW | Nom du jour |
| HH | Heures |
| MI | Minutes |
| SS | Secondes |
create function to_char(@format varchar(100),@date datetime) returns varchar(100)
begin
declare @valeurTexte varchar(500);
set @valeurTexte=@format;
set @valeurTexte=replace(@valeurTexte,'MM',datepart(MM,@date));
-- année : pb année sur 2 chiffres
set @valeurTexte=replace(@valeurTexte,'YYYY',datepart(YYYY,@date));
-- trimestre
set @valeurTexte=replace(@valeurTexte,'qq',datename(qq,@date));
-- jours
set @valeurTexte=replace(@valeurTexte,'DY',datepart(DY,@date));
set @valeurTexte=replace(@valeurTexte,'DW',datename(DW,@date));
set @valeurTexte=replace(@valeurTexte,'WW',datename(WW,@date));
set @valeurTexte=replace(@valeurTexte,'DD',datepart(DD,@date));
-- heures minutes et secondes
set @valeurTexte=replace(@valeurTexte,'HH',datepart(HH,@date));
set @valeurTexte=replace(@valeurTexte,'MI',datepart(MI,@date));
set @valeurTexte=replace(@valeurTexte,'SS',datepart(SS,@date));
return @valeurTexte;
end;
go