DATEDIFF UDF INTERVAL
Description
This UDF is used to resolve operations with intervals like:
INTERVAL - UNKNOWN
UNKNOWN - INTERVAL
DATE - INTERVAL
TIMESTAMP - INTERVAL
Custom UDF overloads
DATEADD_DDIF(string, date)
Parameters
INTERVAL_VALUE: The interval
Stringof the operation.D: The
DATEwhere the interval will be subtracted.
CREATE OR REPLACE FUNCTION PUBLIC.DATEDIFF_UDF(INTERVAL_VALUE STRING,D DATE)
RETURNS DATE
LANGUAGE SQL
IMMUTABLE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"udf"}}'
AS
$$
WITH VARS(INPUT_VALUE, INPUT_PART) AS (
SELECT SUBSTR(INTERVAL_VALUE,11,POSITION('''',INTERVAL_VALUE,11)-11),
TRIM(SUBSTR(INTERVAL_VALUE,POSITION('''',INTERVAL_VALUE,11)+1)))
SELECT
CASE WHEN INPUT_PART='YEAR(2) TO MONTH' OR INPUT_PART='YEAR(4) TO MONTH' THEN
DATEADD(MONTHS,-1*PUBLIC.INTERVAL_TO_MONTHS_UDF(INPUT_VALUE),D)
WHEN INPUT_PART='MONTH' THEN
DATEADD(MONTHS,-1*TO_NUMBER(INPUT_VALUE),D)
ELSE
DATEADD(MICROSECONDS,-1*1000000*PUBLIC.INTERVAL_TO_SECONDS_UDF(INPUT_PART, INPUT_VALUE),D)::DATE
END CASE
FROM VARS
$$;DATEADD_DIFF(date, string)
Parameters
D: The
DATEwhere the interval will be subtracted.INTERVAL_VALUE: The interval
Stringof the operation.
DATEADD_DIFF(string, timestamp)
Parameters
INTERVAL_VALUE: The interval
Stringof the operation.D: The
TIMESTAMPwhere the interval will be subtracted.
DATEADD_DIFF(timestamp, string)
Parameters
D: The
TIMESTAMPwhere the interval will be subtracted.INTERVAL_VALUE: The interval
Stringof the operation.
Usage example
--disableDateAsTimestamp
--disableDateAsTimestampFlag to indicate whether SYSDATE should be transformed into CURRENT_DATE or CURRENT_TIMESTAMP. This will also affect all DATE columns that will be transformed to TIMESTAMP.
Oracle
Snowflake
Known Issues
1. INTERVAL - INTERVAL Operation is not supported
Snowflake does not support INTERVAL - INTERVAL operations.
Related EWIs
SSC-EWI-OR0036: Types resolution issues, the arithmetic operation may not behave correctly between string and date.
Last updated