This scipt is inspired by FormatDate - Mimics the VB Format routine for date. But this script work actually only whith a english Server. I improved this by a language independant. I use 2 others functions to retrieve the Long and short month name.
This scipt is inspired by FormatDate - Mimics the VB Format routine for date. But this script work actually only whith a english Server. I improved this by a language independant. I use 2 others functions to retrieve the Long and short month name.
-------------------------------------------------------------------------------- -- Format: Jourdddd: nom complet du jour --ddd: nom abrégé jour --dd: numéro de jour sur 2 chiffres --d: numéro de jour -- Moismmmm: nom complet du mois --mmm: nom abrégé du mois --mm: numéro du mois sur 2 chiffres --m: numéro du mois -- Annéeyyyy: année sur 4 chiffres --yy: année sur 2 chiffres -------------------------------------------------------------------------------- -- Exemple: dddd, d mmmm yyyy--> Dimanche, 14 juillet 2003 -- ddmmyyyy --> 14072003 -- d-m-yy--> 14-7-03 -- dd/mm/yyyy--> 14/07/2003 -------------------------------------------------------------------------------- CREATE FUNCTION dbo.uf_FormatDate ( @date datetime, -- Date à formater @formatvarchar(50)-- Format de date ) RETURNS VARCHAR(50) AS BEGIN -------------------------------------------------------------------------------- -- Null ? -------------------------------------------------------------------------------- IF @date IS NULL RETURN NULL IF @format IS NULL RETURN NULL -------------------------------------------------------------------------------- -- Variable -------------------------------------------------------------------------------- DECLARE @pos AS INTEGER, @paternAS VARCHAR(4) -------------------------------------------------------------------------------- -- Remplace les paramètres -------------------------------------------------------------------------------- SET @format = REPLACE(@format, 'yyyy', REPLICATE(CHAR(9),4)) SET @format = REPLACE(@format, 'yy', REPLICATE(CHAR(9),2)) SET @format = REPLACE(@format, 'mmmm', REPLICATE(CHAR(10),4)) SET @format = REPLACE(@format, 'mmm', REPLICATE(CHAR(10),3)) SET @format = REPLACE(@format, 'mm', REPLICATE(CHAR(10), 2)) SET @format = REPLACE(@format, 'm', REPLICATE(CHAR(10),1)) SET @format = REPLACE(@format, 'dddd', REPLICATE(CHAR(11),4)) SET @format = REPLACE(@format, 'ddd', REPLICATE(CHAR(11),3)) SET @format = REPLACE(@format, 'dd', REPLICATE(CHAR(11), 2)) SET @format = REPLACE(@format, 'd', REPLICATE(CHAR(11),1)) -------------------------------------------------------------------------------- -- Remplace l'année -------------------------------------------------------------------------------- SET @patern = REPLICATE(CHAR(9),4) SET @pos = CHARINDEX(@patern, @format) WHILE @pos > 0 BEGIN SET @format = STUFF(@format, @pos, 4, DATENAME(yyyy, @date)) SET @pos = CHARINDEX(@patern, @format) END SET @patern = REPLICATE(CHAR(9),2) SET @pos = CHARINDEX(@patern, @format) WHILE @pos > 0 BEGIN SET @format = STUFF(@format, @pos, 2, RIGHT(DATENAME(yyyy, @date) ,2)) SET @pos = CHARINDEX(@patern, @format) END -------------------------------------------------------------------------------- -- Remplace le mois -------------------------------------------------------------------------------- SET @patern = REPLICATE(CHAR(10),4) SET @pos = CHARINDEX(@patern, @format) WHILE @pos > 0 BEGIN SET @format = STUFF(@format, @pos, 4, dbo.uf_MonthName(month(@date))) SET @pos = CHARINDEX(@patern, @format) END SET @patern = REPLICATE(CHAR(10),3) SET @pos = CHARINDEX(@patern, @format) WHILE @pos > 0 BEGIN SET @format = STUFF(@format, @pos, 3, dbo.uf_ShortMonthName(month(@date))) SET @pos = CHARINDEX(@patern, @format) END SET @patern = REPLICATE(CHAR(10),2) SET @pos = CHARINDEX(@patern, @format) WHILE @pos > 0 BEGIN SET @format = STUFF(@format, @pos, 2, RIGHT(('0' + CAST(DATEPART(month, @date) AS VARCHAR(2))), 2)) SET @pos = CHARINDEX(@patern, @format) END SET @patern = REPLICATE(CHAR(10),1) SET @pos = CHARINDEX(@patern, @format) WHILE @pos > 0 BEGIN SET @format = STUFF(@format, @pos, 1, CAST(DATEPART(month, @date) AS VARCHAR(2))) SET @pos = CHARINDEX(@patern, @format) END -------------------------------------------------------------------------------- -- Replace le jour -------------------------------------------------------------------------------- SET @patern = REPLICATE(CHAR(11),4) SET @pos = CHARINDEX(@patern, @format) WHILE @pos > 0 BEGIN SET @format = STUFF(@format, @pos, 4, DATENAME(weekday, @date)) SET @pos = CHARINDEX(@patern, @format) END SET @patern = REPLICATE(CHAR(11),3) SET @pos = CHARINDEX(@patern, @format) WHILE @pos > 0 BEGIN SET @format = STUFF(@format, @pos, 3, LEFT(DATENAME(weekday, @date), 3)) SET @pos = CHARINDEX(@patern, @format) END SET @patern = REPLICATE(CHAR(11),2) SET @pos = CHARINDEX(@patern, @format) WHILE @pos > 0 BEGIN SET @format = STUFF(@format, @pos, 2, RIGHT(('0' + DATENAME(day, @date)), 2)) SET @pos = CHARINDEX(@patern, @format) END SET @patern = REPLICATE(CHAR(11),1) SET @pos = CHARINDEX(@patern, @format) WHILE @pos > 0 BEGIN SET @format = STUFF(@format, @pos, 1, CAST(DATEPART(day, @date) AS VARCHAR(2))) SET @pos = CHARINDEX(@patern, @format) END -- Vide ? IF @format = '//' BEGIN SET @format = '' END -- Renvoie RETURN @format END -------------------------------------------------------------------------------- CREATE FUNCTION dbo.uf_MonthName ( @month int ) RETURNS VARCHAR(15) AS BEGIN -- Variable DECLARE @MonthNamesvarchar(2000), @IndexMonthint, @posint -- Récupère SELECT @MonthNames = months FROMmaster.dbo.syslanguages WHERE name = @@language -- Initialise SET @IndexMonth = 1 --Boucle WHILE @IndexMonth < @month BEGIN SET @pos = CHARINDEX(',', @MonthNames) SET @MonthNames = SUBSTRING(@MonthNames, @pos + 1, 1000) SET @IndexMonth = @IndexMonth + 1 END -- Dernier ? IF CHARINDEX(',', @MonthNames)> 0 SET @MonthNames = LEFT(@MonthNames, CHARINDEX(',', @MonthNames) - 1) -- Renvoie RETURN @MonthNames END -------------------------------------------------------------------------------- CREATE FUNCTION dbo.uf_ShortMonthName ( @month int ) RETURNS VARCHAR(15) AS BEGIN -- Variable DECLARE @MonthNamesvarchar(2000), @IndexMonthint, @posint -- Récupère SELECT @MonthNames = shortmonths FROMmaster.dbo.syslanguages WHERE name = @@language -- Initialise SET @IndexMonth = 1 --Boucle WHILE @IndexMonth < @month BEGIN SET @pos = CHARINDEX(',', @MonthNames) SET @MonthNames = SUBSTRING(@MonthNames, @pos + 1, 1000) SET @IndexMonth = @IndexMonth + 1 END -- Dernier IF CHARINDEX(',', @MonthNames)> 0 SET @MonthNames = LEFT(@MonthNames, CHARINDEX(',', @MonthNames) - 1) -- Renvoie RETURN @MonthNames END