Home Account Search

DateTime Magic Function for SQL database

If you are in to developing custom website design or database development, here is a customised function you can use to get different date-time formats from your SQL database. These are obtained with a little twicks and tricks to make your SQL server do a little more then what it can with its native date/time functions.  It may be very useful for some data-critical projects:

Function:



CREATE FUNCTION dbo.FormatToDateTime
(
    @dt DATETIME,
    @format VARCHAR(16)
)
RETURNS VARCHAR(64)
AS
BEGIN
    DECLARE @dtVC VARCHAR(64)
    SELECT @dtVC = CASE @format
 
    WHEN 'LONGDATE' THEN
 
        DATENAME(dw, @dt)
        + ',' + SPACE(1) + DATENAME(m, @dt)
        + SPACE(1) + CAST(DAY(@dt) AS VARCHAR(2))
        + ',' + SPACE(1) + CAST(YEAR(@dt) AS CHAR(4))
 
    WHEN 'LONGDATEANDTIME' THEN
 
        DATENAME(dw, @dt)
        + ',' + SPACE(1) + DATENAME(m, @dt)
        + SPACE(1) + CAST(DAY(@dt) AS VARCHAR(2))
        + ',' + SPACE(1) + CAST(YEAR(@dt) AS CHAR(4))
        + SPACE(1) + RIGHT(CONVERT(CHAR(20),
        @dt - CONVERT(DATETIME, CONVERT(CHAR(8),
        @dt, 112)), 22), 11)
 
    WHEN 'SHORTDATE' THEN
 
        LEFT(CONVERT(CHAR(19), @dt, 0), 11)
 
    WHEN 'SHORTDATEANDTIME' THEN
 
        REPLACE(REPLACE(CONVERT(CHAR(19), @dt, 0),
            'AM', ' AM'), 'PM', ' PM')
 
    WHEN 'UNIXTIMESTAMP' THEN
 
        CAST(DATEDIFF(SECOND, '19700101', @dt)
        AS VARCHAR(64))
 
    WHEN 'YYYYMMDD' THEN
 
        CONVERT(CHAR(8), @dt, 112)
 
    WHEN 'YYYY-MM-DD' THEN
 
        CONVERT(CHAR(10), @dt, 23)
 
    WHEN 'YYMMDD' THEN
 
        CONVERT(VARCHAR(8), @dt, 12)
 
    WHEN 'YY-MM-DD' THEN
 
        STUFF(STUFF(CONVERT(VARCHAR(8), @dt, 12),
        5, 0, '-'), 3, 0, '-')
 
    WHEN 'MMDDYY' THEN
 
        REPLACE(CONVERT(CHAR(8), @dt, 10), '-', SPACE(0))
 
    WHEN 'MM-DD-YY' THEN
 
        CONVERT(CHAR(8), @dt, 10)
 
    WHEN 'MM/DD/YY' THEN
 
        CONVERT(CHAR(8), @dt, 1)
 
    WHEN 'MM/DD/YYYY' THEN
 
        CONVERT(CHAR(10), @dt, 101)
 
    WHEN 'DDMMYY' THEN
 
        REPLACE(CONVERT(CHAR(8), @dt, 3), '/', SPACE(0))

    WHEN 'MM-YY' THEN
 
        right(convert(varchar(10),@dt,105),7)    
    WHEN 'Mon YYYY' THEN

        SUBSTRING(CONVERT(VARCHAR(11), GETDATE(), 113), 4, 8)    
 
    WHEN 'DD-MM-YY' THEN
 
        REPLACE(CONVERT(CHAR(8), @dt, 3), '/', '-')
 
    WHEN 'DD/MM/YY' THEN
 
        CONVERT(CHAR(8), @dt, 3)
 
    WHEN 'DD/MM/YYYY' THEN
 
        CONVERT(CHAR(10), @dt, 103)
 
    WHEN 'HH:MM:SS 24' THEN
 
        CONVERT(CHAR(8), @dt, 8)
 
    WHEN 'HH:MM 24' THEN
 
        LEFT(CONVERT(VARCHAR(8), @dt, 8), 5)
 
    WHEN 'HH:MM:SS 12' THEN
 
        LTRIM(RIGHT(CONVERT(VARCHAR(20), @dt, 22), 11))
 
    WHEN 'HH:MM 12' THEN
 
        LTRIM(SUBSTRING(CONVERT(
        VARCHAR(20), @dt, 22), 10, 5)
        + RIGHT(CONVERT(VARCHAR(20), @dt, 22), 3))
 
    ELSE
 
        'Invalid format specified'
 
    END
    RETURN @dtVC
END
GO

Example :

PRINT dbo.FormatToDateTime(@now, 'DD/MM/YY')



Now you can also use some tricks by using mix and match to get more out of it. It is easy to alter this function for adding more datetime formats.
Enjoy....

Comments are locked for this post.