DATETIMEOFFSETFROMPARTS is one of the important sql server functions required when we need to make date and time from offset and precision.
Let me explain its syntax, parameters, purpose and examples in detail.
Syntax :
DATETIMEOFFSETFROMPARTS ( year, month, day, hour, minute, seconds, fractions, hour_offset, minute_offset, precision )
Parameters :
@Year : A valid integer for year.
@Month : A valid integer for month range from 1-12.
@Day : A valid integer for day range from 1-31. (Depends upon the total number of days in a month)
@Hour : A valid integer for Hour range from 0-23.
@Minutes : A valid integer for Minutes range from 0-59.
@Seconds: A valid integer for Seconds range from 0-59.
@Fractions : A valid integer for Fractions range from 0-9999999.
@hour_offset : A valid integer for hour portion of the offset range from -14 – +14.
@minute_offset : A valid integer for minute portion of the offset should be 0 or 30
@Precision : A valid integer for Precision range from 0-7.
Purpose :
This function requires year, month, day, hour, minute, seconds, fractions,hour portion of offset, minute portion of offset & precision as a parameter (All parameters are mandatory) and returns a valid datetimeoffset as a result. If we pass any invalid date, time or offset parts, it will generate an error. Also if we pass NULL values to any of its parameters except Precision parameter, it returns NULL value.
Let me explain this with simple examples.
Example-1 : DATETIMEOFFSETFROMPARTS – With valid offset Parts
Declare @Year as smallint=2012 Declare @Month as smallint = 12 Declare @Day as smallint =31 Declare @Hour as int=23 Declare @Minute as int=59 Declare @Second as int=59 Declare @Fraction as int=50 Declare @Hour_offset as int=12 Declare @Minute_offset as int=00 Select DATETIMEOFFSETFROMPARTS( @Year,@Month,@Day,@Hour,@Minute,@Second,@Fraction,@Hour_offset,@Minute_offset,2) as [RESULT] --RESULT 2012-12-31 23:59:59.50 +12:00
Example-2 : DATETIMEOFFSETFROMPARTS – With Invalid offset Parts
It will generate an error because only valid offset parts are allowed as a parameter.
Declare @Year as smallint=2012 Declare @Month as smallint = 12 Declare @Day as smallint =31 Declare @Hour as int=23 Declare @Minute as int=59 Declare @Second as int=59 Declare @Fraction as int=50 Declare @Hour_offset as int=15 -- Invalid Hour offset Declare @Minute_offset as int=00 Select DATETIMEOFFSETFROMPARTS( @Year,@Month,@Day,@Hour,@Minute,@Second,@Fraction,@Hour_offset,@Minute_offset,2) as [RESULT] --RESULT
Msg 289, Level 16, State 6, Line 12
Cannot construct data type datetimeoffset, some of the arguments have values which are not valid.
Example-3 : DATETIMEOFFSETFROMPARTS- With NULL offset parts
If we pass NULL value to any of its parameter except Precision parameter, it will return NULL value
Declare @Year as smallint=2012 Declare @Month as smallint = 12 Declare @Day as smallint =31 Declare @Hour as int=23 Declare @Minute as int=59 Declare @Second as int=59 Declare @Fraction as int=50 Declare @Hour_offset as int=NULL -- Hour offset as NULL Declare @Minute_offset as int=00 Select DATETIMEOFFSETFROMPARTS( @Year,@Month,@Day,@Hour,@Minute,@Second,@Fraction,@Hour_offset,@Minute_offset,2) as [RESULT] --RESULT
NULL
Reference : MSDN