Created
January 21, 2013 02:28
-
-
Save sinairv/4583228 to your computer and use it in GitHub Desktop.
Get Formatted Date SQL Helper Function
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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