|
14 | 14 | See the License for the specific language governing permissions and |
15 | 15 | limitations under the License. |
16 | 16 | #} |
17 | | -{# Returns difference (in integer) between 2 dates #} |
| 17 | +{# Returns difference (as an integer) in between 2 dates #} |
18 | 18 | {% macro oracle__datediff(first_date, second_date, datepart) %} |
19 | | - {%- set single_quote = "\'" -%} |
20 | | - {%- set D2S_INTERVAL_UNITS = ['DAY', 'HOUR', 'MINUTE', 'SECOND'] -%} |
21 | | - {% if datepart.upper() in D2S_INTERVAL_UNITS %} |
22 | | - ROUND((CAST({{ second_date }} AS DATE) - CAST({{ first_date }} AS DATE)) * |
23 | | - decode(upper({{single_quote ~ datepart ~ single_quote}}), |
24 | | - 'HOUR', 24, |
25 | | - 'MINUTE', 24*60, |
26 | | - 'SECOND', 24*60*60, |
27 | | - 1)) |
28 | | - {% elif datepart.upper() == 'WEEK' %} |
29 | | - ROUND((CAST({{ second_date }} AS DATE) - CAST({{ first_date }} AS DATE))/7) |
30 | | - {% elif datepart.upper() == 'MONTH' %} |
31 | | - ROUND((MONTHS_BETWEEN(CAST({{second_date}} AS DATE), CAST({{first_date}} AS DATE)))) |
| 19 | + {% if datepart.upper() == 'YEAR' %} |
| 20 | + ROUND(MONTHS_BETWEEN(TRUNC(CAST({{second_date}} AS DATE), 'YEAR'), TRUNC(CAST({{first_date}} AS DATE), 'YEAR'))/12) |
32 | 21 | {% elif datepart.upper() == 'QUARTER' %} |
33 | | - ROUND((MONTHS_BETWEEN(CAST({{second_date}} AS DATE), CAST({{first_date}} AS DATE))/3)) |
34 | | - {% elif datepart.upper() == 'YEAR' %} |
35 | | - ROUND((MONTHS_BETWEEN(CAST({{second_date}} AS DATE), CAST({{first_date}} AS DATE))/12)) |
| 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))) |
36 | 38 | {% endif %} |
37 | 39 | {% endmacro %} |
0 commit comments