0001
0002
0003
0004 select 3 * (timestamp'2019-10-15 10:11:12.001002' - date'2019-10-15');
0005 select interval 4 month 2 weeks 3 microseconds * 1.5;
0006 select (timestamp'2019-10-15' - timestamp'2019-10-14') / 1.5;
0007 select interval 2147483647 month * 2;
0008 select interval 2147483647 month / 0.5;
0009 select interval 2147483647 day * 2;
0010 select interval 2147483647 day / 0.5;
0011
0012
0013 select interval '2 seconds' / 0;
0014 select interval '2 seconds' / null;
0015 select interval '2 seconds' * null;
0016 select null * interval '2 seconds';
0017
0018
0019 select -interval '-1 month 1 day -1 second';
0020 select -interval -1 month 1 day -1 second;
0021 select +interval '-1 month 1 day -1 second';
0022 select +interval -1 month 1 day -1 second;
0023
0024
0025 select make_interval(1);
0026 select make_interval(1, 2);
0027 select make_interval(1, 2, 3);
0028 select make_interval(1, 2, 3, 4);
0029 select make_interval(1, 2, 3, 4, 5);
0030 select make_interval(1, 2, 3, 4, 5, 6);
0031 select make_interval(1, 2, 3, 4, 5, 6, 7.008009);
0032
0033
0034 select cast('1 second' as interval);
0035 select cast('+1 second' as interval);
0036 select cast('-1 second' as interval);
0037 select cast('+ 1 second' as interval);
0038 select cast('- 1 second' as interval);
0039 select cast('- -1 second' as interval);
0040 select cast('- +1 second' as interval);
0041
0042
0043 select interval 13.123456789 seconds, interval -13.123456789 second;
0044 select interval 1 year 2 month 3 week 4 day 5 hour 6 minute 7 seconds 8 millisecond 9 microsecond;
0045 select interval '30' year '25' month '-100' day '40' hour '80' minute '299.889987299' second;
0046 select interval '0 0:0:0.1' day to second;
0047 select interval '10-9' year to month;
0048 select interval '20 15' day to hour;
0049 select interval '20 15:40' day to minute;
0050 select interval '20 15:40:32.99899999' day to second;
0051 select interval '15:40' hour to minute;
0052 select interval '15:40:32.99899999' hour to second;
0053 select interval '40:32.99899999' minute to second;
0054 select interval '40:32' minute to second;
0055 select interval 30 day day;
0056
0057
0058 select interval '20 15:40:32.99899999' day to hour;
0059 select interval '20 15:40:32.99899999' day to minute;
0060 select interval '15:40:32.99899999' hour to minute;
0061 select interval '15:40.99899999' hour to second;
0062 select interval '15:40' hour to second;
0063 select interval '20 40:32.99899999' minute to second;
0064
0065
0066 select interval 10 nanoseconds;
0067
0068
0069 select map(1, interval 1 day, 2, interval 3 week);
0070
0071
0072 select interval 'interval 3 year 1 hour';
0073 select interval '3 year 1 hour';
0074 SELECT interval '1 year 3 months 2 weeks 2 days 1 hour 3 minutes 2 seconds 100 millisecond 200 microseconds';
0075
0076
0077 select interval;
0078 select interval 1 fake_unit;
0079 select interval 1 year to month;
0080 select interval '1' year to second;
0081 select interval '10-9' year to month '2-1' year to month;
0082 select interval '10-9' year to month '12:11:10' hour to second;
0083 select interval '1 15:11' day to minute '12:11:10' hour to second;
0084 select interval 1 year '2-1' year to month;
0085 select interval 1 year '12:11:10' hour to second;
0086 select interval '10-9' year to month '1' year;
0087 select interval '12:11:10' hour to second '1' year;
0088 select interval (-30) day;
0089 select interval (a + 1) day;
0090 select interval 30 day day day;
0091
0092
0093
0094 create temporary view interval_arithmetic as
0095 select CAST(dateval AS date), CAST(tsval AS timestamp) from values
0096 ('2012-01-01', '2012-01-01')
0097 as interval_arithmetic(dateval, tsval);
0098
0099 select
0100 dateval,
0101 dateval - interval '2-2' year to month,
0102 dateval - interval '-2-2' year to month,
0103 dateval + interval '2-2' year to month,
0104 dateval + interval '-2-2' year to month,
0105 - interval '2-2' year to month + dateval,
0106 interval '2-2' year to month + dateval
0107 from interval_arithmetic;
0108
0109 select
0110 tsval,
0111 tsval - interval '2-2' year to month,
0112 tsval - interval '-2-2' year to month,
0113 tsval + interval '2-2' year to month,
0114 tsval + interval '-2-2' year to month,
0115 - interval '2-2' year to month + tsval,
0116 interval '2-2' year to month + tsval
0117 from interval_arithmetic;
0118
0119 select
0120 interval '2-2' year to month + interval '3-3' year to month,
0121 interval '2-2' year to month - interval '3-3' year to month
0122 from interval_arithmetic;
0123
0124
0125
0126 select
0127 dateval,
0128 dateval - interval '99 11:22:33.123456789' day to second,
0129 dateval - interval '-99 11:22:33.123456789' day to second,
0130 dateval + interval '99 11:22:33.123456789' day to second,
0131 dateval + interval '-99 11:22:33.123456789' day to second,
0132 -interval '99 11:22:33.123456789' day to second + dateval,
0133 interval '99 11:22:33.123456789' day to second + dateval
0134 from interval_arithmetic;
0135
0136 select
0137 tsval,
0138 tsval - interval '99 11:22:33.123456789' day to second,
0139 tsval - interval '-99 11:22:33.123456789' day to second,
0140 tsval + interval '99 11:22:33.123456789' day to second,
0141 tsval + interval '-99 11:22:33.123456789' day to second,
0142 -interval '99 11:22:33.123456789' day to second + tsval,
0143 interval '99 11:22:33.123456789' day to second + tsval
0144 from interval_arithmetic;
0145
0146 select
0147 interval '99 11:22:33.123456789' day to second + interval '10 9:8:7.123456789' day to second,
0148 interval '99 11:22:33.123456789' day to second - interval '10 9:8:7.123456789' day to second
0149 from interval_arithmetic;
0150
0151
0152 select interval '\t interval 1 day';
0153 select interval 'interval \t 1\tday';
0154 select interval 'interval\t1\tday';
0155 select interval '1\t' day;
0156 select interval '1 ' day;
0157 select interval '2-2\t' year to month;
0158 select interval '-\t2-2\t' year to month;
0159 select interval '\n0 12:34:46.789\t' day to second;
0160 select interval '\n-\t10\t 12:34:46.789\t' day to second;
0161
0162
0163 select -(a) from values (interval '-2147483648 months', interval '2147483647 months') t(a, b);
0164 select a - b from values (interval '-2147483648 months', interval '2147483647 months') t(a, b);
0165 select b + interval '1 month' from values (interval '-2147483648 months', interval '2147483647 months') t(a, b);
0166 select a * 1.1 from values (interval '-2147483648 months', interval '2147483647 months') t(a, b);
0167 select a / 0.5 from values (interval '-2147483648 months', interval '2147483647 months') t(a, b);
0168
0169
0170 SELECT
0171 from_csv('1, 1 day', 'a INT, b interval'),
0172 to_csv(from_csv('1, 1 day', 'a INT, b interval')),
0173 to_csv(named_struct('a', interval 32 month, 'b', interval 70 minute)),
0174 from_csv(to_csv(named_struct('a', interval 32 month, 'b', interval 70 minute)), 'a interval, b interval');
0175 SELECT
0176 from_json('{"a":"1 days"}', 'a interval'),
0177 to_json(from_json('{"a":"1 days"}', 'a interval')),
0178 to_json(map('a', interval 25 month 100 day 130 minute)),
0179 from_json(to_json(map('a', interval 25 month 100 day 130 minute)), 'a interval');