Skip to content

Instantly share code, notes, and snippets.

@sinairv
Created January 21, 2013 02:28
Show Gist options
  • Save sinairv/4583228 to your computer and use it in GitHub Desktop.
Save sinairv/4583228 to your computer and use it in GitHub Desktop.
Get Formatted Date SQL Helper Function
IF EXISTS
(SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'GetFormattedDate')
AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[GetFormattedDate]
GO
CREATE FUNCTION [dbo].[GetFormattedDate]
(
@TheDate DATETIME, @Format VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
-- trying to keep it compatible with: http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx
DECLARE @Result VARCHAR(200);
SET @Result = @Format;
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_Cp1_CI_AI, 'dddd' COLLATE SQL_Latin1_General_Cp1_CI_AI, '{0}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_Cp1_CI_AI, 'ddd' COLLATE SQL_Latin1_General_Cp1_CI_AI, '{1}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_Cp1_CI_AI, 'dd' COLLATE SQL_Latin1_General_Cp1_CI_AI, '{2}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_Cp1_CI_AI, 'd' COLLATE SQL_Latin1_General_Cp1_CI_AI, '{3}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_Cp1_CI_AI, 'FFFFFFF' COLLATE SQL_Latin1_General_Cp1_CI_AI, '{4}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_Cp1_CI_AI, 'FFFFFF' COLLATE SQL_Latin1_General_Cp1_CI_AI, '{5}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_Cp1_CI_AI, 'FFFFF' COLLATE SQL_Latin1_General_Cp1_CI_AI, '{6}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_Cp1_CI_AI, 'FFFF' COLLATE SQL_Latin1_General_Cp1_CI_AI, '{7}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_Cp1_CI_AI, 'FFF' COLLATE SQL_Latin1_General_Cp1_CI_AI, '{8}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_Cp1_CI_AI, 'FF' COLLATE SQL_Latin1_General_Cp1_CI_AI, '{9}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_Cp1_CI_AI, 'F' COLLATE SQL_Latin1_General_Cp1_CI_AI, '{10}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, 'gg' COLLATE SQL_Latin1_General_CP1_CS_AS, '{11}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, 'g' COLLATE SQL_Latin1_General_CP1_CS_AS, '{11}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, 'HH' COLLATE SQL_Latin1_General_CP1_CS_AS, '{12}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, 'H' COLLATE SQL_Latin1_General_CP1_CS_AS, '{13}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, 'hh' COLLATE SQL_Latin1_General_CP1_CS_AS, '{14}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, 'h' COLLATE SQL_Latin1_General_CP1_CS_AS, '{15}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, 'mm' COLLATE SQL_Latin1_General_CP1_CS_AS, '{16}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, 'm' COLLATE SQL_Latin1_General_CP1_CS_AS, '{17}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, 'MMMM' COLLATE SQL_Latin1_General_CP1_CS_AS, '{18}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, 'MMM' COLLATE SQL_Latin1_General_CP1_CS_AS, '{19}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, 'MM' COLLATE SQL_Latin1_General_CP1_CS_AS, '{20}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, 'M' COLLATE SQL_Latin1_General_CP1_CS_AS, '{21}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, 'ss' COLLATE SQL_Latin1_General_CP1_CS_AS, '{22}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, 's' COLLATE SQL_Latin1_General_CP1_CS_AS, '{23}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, 'tt' COLLATE SQL_Latin1_General_CP1_CS_AS, '{24}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, 't' COLLATE SQL_Latin1_General_CP1_CS_AS, '{25}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_Cp1_CI_AI, 'YYYY' COLLATE SQL_Latin1_General_Cp1_CI_AI, '{26}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_Cp1_CI_AI, 'YYY' COLLATE SQL_Latin1_General_Cp1_CI_AI, '{26}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_Cp1_CI_AI, 'YY' COLLATE SQL_Latin1_General_Cp1_CI_AI, '{27}');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_Cp1_CI_AI, 'Y' COLLATE SQL_Latin1_General_Cp1_CI_AI, '{28}');
------
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{0}' COLLATE SQL_Latin1_General_CP1_CS_AS, DATENAME(WEEKDAY, @TheDate));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{1}' COLLATE SQL_Latin1_General_CP1_CS_AS, LEFT(DATENAME(WEEKDAY, @TheDate), 3));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{2}' COLLATE SQL_Latin1_General_CP1_CS_AS, RIGHT( '00' + CONVERT(VARCHAR(2), DATEPART(DAY, @TheDate)), 2));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{3}' COLLATE SQL_Latin1_General_CP1_CS_AS, CONVERT(VARCHAR(2), DATEPART(DAY, @TheDate)));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{4}' COLLATE SQL_Latin1_General_CP1_CS_AS, LEFT(CONVERT(VARCHAR(10), DATEPART(MS, @TheDate)),7));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{5}' COLLATE SQL_Latin1_General_CP1_CS_AS, LEFT(CONVERT(VARCHAR(10), DATEPART(MS, @TheDate)),6));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{6}' COLLATE SQL_Latin1_General_CP1_CS_AS, LEFT(CONVERT(VARCHAR(10), DATEPART(MS, @TheDate)),5));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{7}' COLLATE SQL_Latin1_General_CP1_CS_AS, LEFT(CONVERT(VARCHAR(10), DATEPART(MS, @TheDate)),4));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{8}' COLLATE SQL_Latin1_General_CP1_CS_AS, LEFT(CONVERT(VARCHAR(10), DATEPART(MS, @TheDate)),3));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{9}' COLLATE SQL_Latin1_General_CP1_CS_AS, LEFT(CONVERT(VARCHAR(10), DATEPART(MS, @TheDate)),2));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{10}' COLLATE SQL_Latin1_General_CP1_CS_AS, LEFT(CONVERT(VARCHAR(10), DATEPART(MS, @TheDate)),1));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{11}' COLLATE SQL_Latin1_General_CP1_CS_AS, 'AD');
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{12}' COLLATE SQL_Latin1_General_CP1_CS_AS, RIGHT( '00' + CONVERT(VARCHAR(2), DATEPART(HOUR, @TheDate)), 2));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{13}' COLLATE SQL_Latin1_General_CP1_CS_AS, CONVERT(VARCHAR(2), DATEPART(HOUR, @TheDate)));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{14}' COLLATE SQL_Latin1_General_CP1_CS_AS, RIGHT( '00' + CONVERT(VARCHAR(2), CASE WHEN DATEPART(HOUR, @TheDate) > 12 THEN DATEPART(HOUR, @TheDate) - 12 ELSE DATEPART(HOUR, @TheDate) END ), 2));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{15}' COLLATE SQL_Latin1_General_CP1_CS_AS, CONVERT(VARCHAR(2), CASE WHEN DATEPART(HOUR, @TheDate) > 12 THEN DATEPART(HOUR, @TheDate) - 12 ELSE DATEPART(HOUR, @TheDate) END ));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{16}' COLLATE SQL_Latin1_General_CP1_CS_AS, RIGHT( '00' + CONVERT(VARCHAR(2), DATEPART(MINUTE, @TheDate)), 2));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{17}' COLLATE SQL_Latin1_General_CP1_CS_AS, CONVERT(VARCHAR(2), DATEPART(MINUTE, @TheDate)));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{18}' COLLATE SQL_Latin1_General_CP1_CS_AS, DATENAME(MONTH, @TheDate));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{19}' COLLATE SQL_Latin1_General_CP1_CS_AS, LEFT(DATENAME(MONTH, @TheDate), 3));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{20}' COLLATE SQL_Latin1_General_CP1_CS_AS, RIGHT('00' + CONVERT(VARCHAR(2), DATEPART(MONTH, @TheDate)), 2));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{21}' COLLATE SQL_Latin1_General_CP1_CS_AS, CONVERT(VARCHAR(2), DATEPART(MONTH, @TheDate)));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{22}' COLLATE SQL_Latin1_General_CP1_CS_AS, RIGHT('00' + CONVERT(VARCHAR(2), DATEPART(SECOND, @TheDate)), 2));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{23}' COLLATE SQL_Latin1_General_CP1_CS_AS, CONVERT(VARCHAR(2), DATEPART(SECOND, @TheDate)));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{24}' COLLATE SQL_Latin1_General_CP1_CS_AS, CASE WHEN DATEPART(HOUR, @TheDate) >= 12 THEN 'PM' ELSE 'AM' END );
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{25}' COLLATE SQL_Latin1_General_CP1_CS_AS, CASE WHEN DATEPART(HOUR, @TheDate) >= 12 THEN 'P' ELSE 'A' END );
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{26}' COLLATE SQL_Latin1_General_CP1_CS_AS, CONVERT(VARCHAR(4), DATEPART(YEAR, @TheDate)));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{27}' COLLATE SQL_Latin1_General_CP1_CS_AS, RIGHT(CONVERT(VARCHAR(4), DATEPART(YEAR, @TheDate)), 2));
SET @Result = REPLACE(@Result COLLATE SQL_Latin1_General_CP1_CS_AS, '{28}' COLLATE SQL_Latin1_General_CP1_CS_AS, RIGHT(CONVERT(VARCHAR(4), DATEPART(YEAR, @TheDate)), 1));
RETURN @Result;
END
GO
DECLARE @TheDate DATETIME;
DECLARE @Format VARCHAR(100)
SET @TheDate = GETDATE();
SET @Format = 'DD/MM/YYYY hh:mm:ss:fff tt OR DD MMM (MMMM) YYYY';
SELECT [dbo].[GetFormattedDate](@TheDate, @Format)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment