|
| 1 | +{# |
| 2 | + Copyright (c) 2022, Oracle and/or its affiliates. |
| 3 | + Copyright (c) 2020, Vitor Avancini |
| 4 | + |
| 5 | + Licensed under the Apache License, Version 2.0 (the "License"); |
| 6 | + you may not use this file except in compliance with the License. |
| 7 | + You may obtain a copy of the License at |
| 8 | + |
| 9 | + https://www.apache.org/licenses/LICENSE-2.0 |
| 10 | + |
| 11 | + Unless required by applicable law or agreed to in writing, software |
| 12 | + distributed under the License is distributed on an "AS IS" BASIS, |
| 13 | + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 14 | + See the License for the specific language governing permissions and |
| 15 | + limitations under the License. |
| 16 | +#} |
| 17 | +{# Returns difference (as an integer) in between 2 dates #} |
| 18 | +{% macro oracle__datediff(first_date, second_date, datepart) %} |
| 19 | + {% if datepart.upper() == 'YEAR' %} |
| 20 | + ROUND(MONTHS_BETWEEN(TRUNC(CAST({{second_date}} AS DATE), 'YEAR'), TRUNC(CAST({{first_date}} AS DATE), 'YEAR'))/12) |
| 21 | + {% elif datepart.upper() == 'QUARTER' %} |
| 22 | + ROUND(MONTHS_BETWEEN(TRUNC(CAST({{second_date}} AS DATE), 'Q'), TRUNC(CAST({{first_date}} AS DATE), 'Q'))/3) |
| 23 | + {% elif datepart.upper() == 'MONTH'%} |
| 24 | + ROUND(MONTHS_BETWEEN(TRUNC(CAST({{second_date}} AS DATE), 'MONTH'), TRUNC(CAST({{first_date}} AS DATE), 'MONTH'))) |
| 25 | + {% elif datepart.upper() == 'WEEK' %} |
| 26 | + ROUND((TRUNC(CAST({{ second_date }} AS DATE), 'DAY') - TRUNC(CAST({{ first_date }} AS DATE), 'DAY'))/7) |
| 27 | + {% elif datepart.upper() == 'DAY' %} |
| 28 | + ROUND(TRUNC(CAST({{ second_date }} AS DATE), 'DD') - TRUNC(CAST({{ first_date }} AS DATE), 'DD')) |
| 29 | + {% elif datepart.upper() == 'HOUR' %} |
| 30 | + ROUND((TRUNC(CAST({{ second_date }} AS DATE), 'HH') - TRUNC(CAST({{ first_date }} AS DATE), 'HH'))*24) |
| 31 | + {% elif datepart.upper() == 'MINUTE' %} |
| 32 | + ROUND((TRUNC(CAST({{ second_date }} AS DATE), 'MI') - TRUNC(CAST({{ first_date }} AS DATE), 'MI'))*24*60) |
| 33 | + {% elif datepart.upper() == 'SECOND' %} |
| 34 | + EXTRACT(DAY FROM (CAST({{ second_date }} AS TIMESTAMP) - CAST({{ first_date }} AS TIMESTAMP)))*24*60*60 |
| 35 | + +EXTRACT(HOUR FROM (CAST({{ second_date }} AS TIMESTAMP) - CAST({{ first_date }} AS TIMESTAMP)))*60*60 |
| 36 | + +EXTRACT(MINUTE FROM (CAST({{ second_date }} AS TIMESTAMP) - CAST({{ first_date }} AS TIMESTAMP)))*60 |
| 37 | + +EXTRACT(SECOND FROM (CAST({{ second_date }} AS TIMESTAMP) - CAST({{ first_date }} AS TIMESTAMP))) |
| 38 | + {% endif %} |
| 39 | +{% endmacro %} |
0 commit comments