Atlanta Custom Software Development 

 
   Search        Code/Page
 

User Login
Email

Password

 

Forgot the Password?
Services
» Web Development
» Maintenance
» Data Integration/BI
» Information Management
Programming
  Database
Automation
OS/Networking
Graphics
Links
Tools
» Regular Expr Tester
» Free Tools

Date and Time User-Defined Functions

Total Hit ( 3845)

Rate this article:     Poor     Excellent 

 Submit Your Question/Comment about this article

Rating


 


Introduction
Date and Time UDFs
DatePart
TimePart
GetWorkingDays
AddWorkingDays
FirstMonthDay
LastMonthDay


--------------------------------------------------------------------------------


Introduction
I would like to write the series of articles about useful User-Defined Functions grouped by the following categories:


Date and Time User-Defined Functions
Mathematical User-Defined Functions
Metadata User-Defined Functions
Security User-Defined Functions
String User-Defined Functions
System User-Defined Functions
Text and Image User-Defined Functions

In this article, I wrote some useful Date and Time User-Defined Functions.


Date and Time UDFs
These scalar User-Defined Functions perform an operation on a date and time input value and return a string, numeric, or date and time value.


DatePart
Returns the date part of the datetime value.


Syntax
DatePart ( datepart )


Arguments
datepart - datetime value.


Return Types
varchar


The function's text:
CREATE FUNCTION dbo.DatePart
 ( @fDate datetime )
RETURNS varchar(10)
AS
BEGIN
 RETURN ( CONVERT(varchar(10),@fDate,101) )
END
GO




Example
This example returns a character string contained the date part of the datetime value:

SELECT dbo.DatePart('11/11/2000 11:15AM')

Here is the result set:

----------
11/11/2000

(1 row(s) affected)


TimePart
Returns the time part of the datetime value.


Syntax
TimePart ( datepart )


Arguments
datepart - datetime value.


Return Types
varchar


The function's text:
CREATE FUNCTION dbo.TimePart
 ( @fDate datetime )
RETURNS varchar(10)
AS
BEGIN
 RETURN ( CONVERT(varchar(7),right(@fDate,7),101) )
END
GO




Example
This example returns a character string contained the time part of the datetime value:

SELECT dbo.TimePart('11/11/2000 11:15AM')

Here is the result set:

----------
11:15AM

(1 row(s) affected)


GetWorkingDays
Returns the number of working days between two dates (not including these dates).


Syntax
GetWorkingDays ( StartDate, EndDate )


Arguments
StartDate - the datetime value (start date).
EndDate - the datetime value (end date).


Return Types
int


The function's text:
CREATE FUNCTION dbo.GetWorkingDays
 ( @StartDate datetime,
  @EndDate datetime )
RETURNS INT
AS
BEGIN
 DECLARE @WorkDays int, @FirstPart int
 DECLARE @FirstNum int, @TotalDays int
 DECLARE @LastNum int, @LastPart int
 IF (DATEDIFF(day, @StartDate, @EndDate) < 2)
  BEGIN
   RETURN ( 0 )
  END
 SELECT
  @TotalDays = DATEDIFF(day, @StartDate, @EndDate) - 1,
  @FirstPart = CASE DATENAME(weekday, @StartDate)
         WHEN 'Sunday' THEN 6
         WHEN 'Monday' THEN 5
         WHEN 'Tuesday' THEN 4
         WHEN 'Wednesday' THEN 3
         WHEN 'Thursday' THEN 2
         WHEN 'Friday' THEN 1
         WHEN 'Saturday' THEN 0
        END,
  @FirstNum = CASE DATENAME(weekday, @StartDate)
         WHEN 'Sunday' THEN 5
         WHEN 'Monday' THEN 4
         WHEN 'Tuesday' THEN 3
         WHEN 'Wednesday' THEN 2
         WHEN 'Thursday' THEN 1
         WHEN 'Friday' THEN 0
         WHEN 'Saturday' THEN 0
        END
 IF (@TotalDays < @FirstPart)
   BEGIN
    SELECT @WorkDays = @TotalDays
   END
 ELSE
   BEGIN
    SELECT @WorkDays = (@TotalDays - @FirstPart) / 7
    SELECT @LastPart = (@TotalDays - @FirstPart) % 7
    SELECT @LastNum = CASE
     WHEN (@LastPart < 7) AND (@LastPart > 0) THEN @LastPart - 1
     ELSE 0
    END
    SELECT @WorkDays = @WorkDays * 5 + @FirstNum + @LastNum
   END
 RETURN ( @WorkDays )
END
GO




Example
Returns the number of working days between '11/13/2000' and '12/27/2000':

SELECT dbo.GetWorkingDays ('11/13/2000', '12/27/2000')

Here is the result set:

-----------
31

(1 row(s) affected)


AddWorkingDays
Works like DATEADD, but adds the working days.


Syntax
AddWorkingDays ( StartDate, WorkDays )


Arguments
StartDate - the datetime value (start date).
WorkDays - the integer value (number of working days).


Return Types
datetime


The function's text:
CREATE FUNCTION dbo.ADDWorkingDays
 ( @StartDate datetime,
  @WorkDays int )
RETURNS datetime
AS
BEGIN
 DECLARE @TotalDays int, @FirstPart int
 DECLARE @EndDate datetime
 DECLARE @LastNum int, @LastPart int

 IF @WorkDays < 0
   BEGIN
    SELECT @FirstPart = CASE DATENAME(weekday, @StartDate)
         WHEN 'Sunday' THEN 0
         WHEN 'Monday' THEN 1
         WHEN 'Tuesday' THEN 2
         WHEN 'Wednesday' THEN 3
         WHEN 'Thursday' THEN 4
         WHEN 'Friday' THEN 5
         WHEN 'Saturday' THEN 6
        END
    IF ABS(@WorkDays) < @FirstPart
     SELECT @EndDate = DATEADD(dd, @WorkDays, @StartDate)
    ELSE
     BEGIN
      SELECT @TotalDays = (ABS(@WorkDays) - @FirstPart) / 5
      SELECT @LastPart = (ABS(@WorkDays) - @FirstPart) % 7
      SELECT @LastNum = CASE
       WHEN (@LastPart < 7) AND (@LastPart > 0) THEN @LastPart - 1
       ELSE 0
      END
      SELECT @TotalDays = - 2 * (@TotalDays + 1) + @WorkDays
      SELECT @EndDate = DATEADD(dd, @TotalDays, @StartDate)
     END
   END

 ELSE

   BEGIN
    SELECT @FirstPart = CASE DATENAME(weekday, @StartDate)
         WHEN 'Sunday' THEN 6
         WHEN 'Monday' THEN 5
         WHEN 'Tuesday' THEN 4
         WHEN 'Wednesday' THEN 3
         WHEN 'Thursday' THEN 2
         WHEN 'Friday' THEN 1
         WHEN 'Saturday' THEN 0
        END
    IF @WorkDays < @FirstPart
     SELECT @EndDate = DATEADD(dd, @WorkDays, @StartDate)
    ELSE
     BEGIN
      SELECT @TotalDays = (@WorkDays - @FirstPart) / 5
      SELECT @LastPart = (@WorkDays - @FirstPart) % 7
      SELECT @LastNum = CASE
       WHEN (@LastPart < 7) AND (@LastPart > 0) THEN @LastPart - 1
       ELSE 0
      END
      SELECT @TotalDays = 2 * (@TotalDays + 1) + @WorkDays
      SELECT @EndDate = DATEADD(dd, @TotalDays, @StartDate)
     END
   END

 RETURN ( @EndDate )

END
GO




Example
Adds 9 working days to '11/13/2002' and returns the result date:

SELECT dbo.AddWorkingDays ('11/13/2002', 9)

Here is the result set:

-------------------------------------
2002-11-26 00:00:00.000

(1 row(s) affected)


FirstMonthDay
Returns the first day of the month for the given date.


Syntax
FirstMonthDay ( date )


Arguments
date - datetime value.


Return Types
datetime


The function's text:
CREATE FUNCTION dbo.FirstMonthDay
 ( @Date datetime )
RETURNS datetime
AS
BEGIN
RETURN (CAST(STR(MONTH(@Date)) + '/' + STR(01) + '/' + STR(YEAR(@Date)) AS DateTime))
END
GO




Example
Returns the first day for the '06/15/99' date:

SELECT dbo.FirstMonthDay('06/15/99')

Here is the result set (from my machine):

-------------------------------------
1999-06-01 00:00:00.000

(1 row(s) affected)


LastMonthDay
Returns the last day of the month for the given date.


Syntax
LastMonthDay ( date )


Arguments
date - datetime value.


Return Types
datetime


The function's text:
CREATE FUNCTION dbo.LastMonthDay
 ( @Date datetime )
RETURNS datetime
AS
BEGIN
RETURN (CASE WHEN MONTH(@Date)= 12
THEN DATEADD(day,-1,CAST('01/01/'+STR(YEAR(@Date)+1) AS DateTime))
ELSE DATEADD(day,-1,CAST(STR(MONTH(@Date)+1)+'/01/'+STR(YEAR(@Date)) AS DateTime))
END)
END
GO




Example
Returns the last day for the '0


Submitted By : Nayan Patel  (Member Since : 5/26/2004 12:23:06 PM)

Job Description : He is the moderator of this site and currently working as an independent consultant. He works with VB.net/ASP.net, SQL Server and other MS technologies. He is MCSD.net, MCDBA and MCSE. In his free time he likes to watch funny movies and doing oil painting.
View all (893) submissions by this author  (Birth Date : 7/14/1981 )


Home   |  Comment   |  Contact Us   |  Privacy Policy   |  Terms & Conditions   |  BlogsZappySys

© 2008 BinaryWorld LLC. All rights reserved.