OADD_MONTHS Argument Types and Rules - Teradata Vantage

Teradata® VantageCloud Lake

Deployment
VantageCloud
Edition
Lake
Product
Teradata Vantage
Published
January 2023
Language
English (United States)
Last Update
2024-04-03
dita:mapPath
phg1621910019905.ditamap
dita:ditavalPath
pny1626732985837.ditaval
dita:id
phg1621910019905
Expressions passed to this function must have the following data types:
  • date_timestamp_value = DATE, TIMESTAMP, or TIMESTAMP WITH TIME ZONE
  • num_months = INTEGER

For the num_months argument, you can also pass values with data types that can be converted to INTEGER using the implicit data type conversion rules that apply to UDFs. Implicit type conversion is not supported for the date_timestamp_value argument.

The UDF implicit type conversion rules are more restrictive than the implicit type conversion rules typically used by Vantage. If an argument cannot be converted to the required data type following the UDF implicit conversion rules, the argument must be explicitly cast.

Because TIMESTAMP values are stored in UTC time within the database and lack a time zone, the session time zone is used to interpret the time stamp value within the function. For TIMESTAMP WITH TIME ZONE values, the time zone component is used to interpret the time stamp value within the function.

If the day component of date_timestamp_value is the last day of the month, or if the resulting month has fewer days than the day component of date_timestamp_value, OADD_MONTHS returns the last day of the resulting month. Otherwise, OADD_MONTHS returns a value that has the same day component as date_timestamp_value.

The difference between OADD_MONTHS and ADD_MONTHS is that if a month is added to an end-of-month date in OADD_MONTHS, the function returns an end-of-month date. The following queries show the difference between ADD_MONTHS and OADD_MONTHS:

SELECT ADD_MONTHS ('2008-02-29', 1);

Result:

'08/03/29'
SELECT OADD_MONTHS ('2008-02-29', 1);

Result:

'08/03/31'