mirror of
https://github.com/apache/impala.git
synced 2026-01-26 12:02:21 -05:00
Removed the support for dateless timestamps.
During dateless timestamp casts if the format doesn't contain
date part we get an error during tokenization of the format.
If the input str doesn't contain a date part then we get null result.
Examples:
select cast('01:02:59' as timestamp);
This will come back as NULL value.
select to_timestamp('01:01:01', 'HH:mm:ss');
select cast('01:02:59' as timestamp format 'HH12:MI:SS');
select cast('12 AM' as timestamp FORMAT 'AM.HH12');
These will come back with a parsing errors.
Casting from a table will generate similar results.
Testing:
Modified the previous tests related to dateless timestamps.
Added test to read fromtables which are still containing dateless
timestamps and covered timestamp to string path when no date tokens
are requested in the output string.
Change-Id: I48c49bf027cc4b917849b3d58518facba372b322
Reviewed-on: http://gerrit.cloudera.org:8080/15866
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Gabor Kaszab <gaborkaszab@cloudera.com>
887 lines
20 KiB
Plaintext
887 lines
20 KiB
Plaintext
====
|
|
---- QUERY
|
|
# TODO: Once DATE type is supported across all fileformats, move this test to
|
|
# hdfs-scan-node.test.
|
|
select id_col, date_part, date_col from date_tbl;
|
|
---- RESULTS
|
|
0,0001-01-01,0001-01-01
|
|
1,0001-01-01,0001-12-31
|
|
2,0001-01-01,0002-01-01
|
|
3,0001-01-01,1399-12-31
|
|
4,0001-01-01,2017-11-28
|
|
5,0001-01-01,9999-12-31
|
|
6,0001-01-01,NULL
|
|
10,1399-06-27,2017-11-28
|
|
11,1399-06-27,NULL
|
|
12,1399-06-27,2018-12-31
|
|
20,2017-11-27,0001-06-21
|
|
21,2017-11-27,0001-06-22
|
|
22,2017-11-27,0001-06-23
|
|
23,2017-11-27,0001-06-24
|
|
24,2017-11-27,0001-06-25
|
|
25,2017-11-27,0001-06-26
|
|
26,2017-11-27,0001-06-27
|
|
27,2017-11-27,0001-06-28
|
|
28,2017-11-27,0001-06-29
|
|
29,2017-11-27,2017-11-28
|
|
30,9999-12-31,9999-12-01
|
|
31,9999-12-31,9999-12-31
|
|
---- TYPES
|
|
INT,DATE,DATE
|
|
====
|
|
---- QUERY
|
|
# TODO: Once DATE type is supported across all fileformats, move these tests to
|
|
# exprs.test.
|
|
select count(*) from date_tbl
|
|
where '2017-11-28' in (date_col)
|
|
---- RESULTS
|
|
3
|
|
---- TYPES
|
|
bigint
|
|
====
|
|
---- QUERY
|
|
select count(*) from date_tbl
|
|
where date_col in ('2017-11-28', '0001-1-1', DATE '9999-12-31', '0001-06-25',
|
|
DATE '0001-6-23', '2018-12-31', '0001-01-01', '2018-12-31')
|
|
---- RESULTS
|
|
9
|
|
---- TYPES
|
|
bigint
|
|
====
|
|
---- QUERY
|
|
select count(*) from date_tbl
|
|
where '2017-11-28' not in (date_col)
|
|
---- RESULTS
|
|
17
|
|
---- TYPES
|
|
bigint
|
|
====
|
|
---- QUERY
|
|
select count(*) from date_tbl
|
|
where date_col not in ('2017-11-28', '0001-1-1', DATE '9999-12-31', '0001-06-25',
|
|
DATE '0001-6-23', '2018-12-31', '0001-01-01', '2018-12-31')
|
|
---- RESULTS
|
|
11
|
|
---- TYPES
|
|
bigint
|
|
====
|
|
---- QUERY
|
|
select date_col, count(*) from date_tbl where case date_col
|
|
when '2017-11-28' then "true"
|
|
else "false" end = "true" group by 1
|
|
---- RESULTS
|
|
2017-11-28,3
|
|
---- TYPES
|
|
DATE, BIGINT
|
|
====
|
|
---- QUERY
|
|
select count(*) from date_tbl where date_col
|
|
between '2017-11-28' and '2017-11-28'
|
|
---- RESULTS
|
|
3
|
|
---- TYPES
|
|
bigint
|
|
====
|
|
---- QUERY
|
|
select count(*) from date_tbl where date_col
|
|
not between '2017-11-28' and '2017-11-28'
|
|
---- RESULTS
|
|
17
|
|
---- TYPES
|
|
bigint
|
|
====
|
|
---- QUERY
|
|
# Test 0001-01-01 date handling during string to date conversion.
|
|
select CAST("0001-01-01" AS DATE);
|
|
---- RESULTS
|
|
0001-01-01
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
# Test < 0001 date handling during string to date conversion.
|
|
select CAST("0000-01-01" AS DATE);
|
|
---- CATCH
|
|
UDF ERROR: String to Date parse failed. Invalid string val: "0000-01-01"
|
|
====
|
|
---- QUERY
|
|
# Test <1400 date handling during string to date conversion.
|
|
select CAST("1399-12-31" AS DATE);
|
|
---- RESULTS
|
|
1399-12-31
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
# Test >=10000 date handling during string to date conversion.
|
|
select CAST("10000-01-01" AS DATE);
|
|
---- CATCH
|
|
UDF ERROR: String to Date parse failed. Invalid string val: "10000-01-01"
|
|
====
|
|
---- QUERY
|
|
# Test leap year checking during string to date conversion.
|
|
select CAST("1900-02-29" AS DATE);
|
|
---- CATCH
|
|
UDF ERROR: String to Date parse failed. Invalid string val: "1900-02-29"
|
|
====
|
|
---- QUERY
|
|
# Test invalid format handling during string to date conversion.
|
|
select CAST("not a date" AS DATE);
|
|
---- CATCH
|
|
UDF ERROR: String to Date parse failed. Invalid string val: "not a date"
|
|
====
|
|
---- QUERY
|
|
# Test 0001-01-01 and 9999-12-31 date literal
|
|
select DATE "0001-01-01", DATE '9999-12-31';
|
|
---- RESULTS
|
|
0001-01-01,9999-12-31
|
|
---- TYPES
|
|
DATE,DATE
|
|
====
|
|
---- QUERY
|
|
# Test < 0001 date literal.
|
|
select DATE "0000-01-01";
|
|
---- CATCH
|
|
AnalysisException: Invalid date literal: '0000-01-01'
|
|
====
|
|
---- QUERY
|
|
# Test >=10000 date literal.
|
|
select DATE "10000-01-01";
|
|
---- CATCH
|
|
AnalysisException: Invalid date literal: '10000-01-01'
|
|
====
|
|
---- QUERY
|
|
# Test invalid dare literal
|
|
select DATE "not a date";
|
|
---- CATCH
|
|
AnalysisException: Invalid date literal: 'not a date'
|
|
====
|
|
---- QUERY
|
|
# Test leap year checking in date literal
|
|
select DATE "1900-02-29";
|
|
---- CATCH
|
|
AnalysisException: Invalid date literal: '1900-02-29'
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
select murmur_hash(date_col), murmur_hash(date_part) from date_tbl;
|
|
---- RESULTS
|
|
-232951748055606586,7040505807414357930
|
|
-3732010091053269412,7040505807414357930
|
|
-3974699570613064843,-603226120891050888
|
|
-7063415310100391105,1363129737749198513
|
|
-7676893653355904113,-603226120891050888
|
|
1274392552456687587,-603226120891050888
|
|
232326618821724181,-603226120891050888
|
|
2388222541326638441,6952609697003645459
|
|
2741588585509081281,-603226120891050888
|
|
335637154849784215,-603226120891050888
|
|
335637154849784215,1363129737749198513
|
|
335637154849784215,7040505807414357930
|
|
4285738516310795057,-603226120891050888
|
|
5184255335234340452,-603226120891050888
|
|
5446911420184118521,-603226120891050888
|
|
6701568911426106324,-603226120891050888
|
|
6952609697003645459,6952609697003645459
|
|
6952609697003645459,7040505807414357930
|
|
7040505807414357930,7040505807414357930
|
|
7846901255014371649,7040505807414357930
|
|
NULL,1363129737749198513
|
|
NULL,7040505807414357930
|
|
---- TYPES
|
|
BIGINT, BIGINT
|
|
====
|
|
---- QUERY
|
|
# Test support for non zero-padded date strings cast as date
|
|
select cast('2001-1-21' as date), cast('2001-1-2' as date)
|
|
---- RESULTS
|
|
2001-01-21,2001-01-02
|
|
---- TYPES
|
|
DATE,DATE
|
|
====
|
|
---- QUERY
|
|
# Test support for non zero-padded date literals
|
|
select date '2001-1-21', date '2001-1-2'
|
|
---- RESULTS
|
|
2001-01-21,2001-01-02
|
|
---- TYPES
|
|
DATE,DATE
|
|
====
|
|
---- QUERY
|
|
# Test that casts are not allowed between DATE and numerical types
|
|
select cast(date '2000-12-21' as int);
|
|
---- CATCH
|
|
AnalysisException: Invalid type cast of DATE '2000-12-21' from DATE to INT
|
|
====
|
|
---- QUERY
|
|
select cast(123.45 as date);
|
|
---- CATCH
|
|
AnalysisException: Invalid type cast of 123.45 from DECIMAL(5,2) to DATE
|
|
====
|
|
---- QUERY
|
|
select count(*) from date_tbl where date_col <= '1399-12-31';
|
|
---- RESULTS
|
|
13
|
|
---- TYPES
|
|
BIGINT
|
|
====
|
|
---- QUERY
|
|
select count(*), count(date_part), count(date_col),
|
|
count(distinct date_part), count(distinct date_col)
|
|
from date_tbl;
|
|
---- RESULTS
|
|
22,22,20,4,17
|
|
---- TYPES
|
|
BIGINT,BIGINT,BIGINT,BIGINT,BIGINT
|
|
====
|
|
---- QUERY
|
|
select date_part, count(date_col) from date_tbl group by date_part;
|
|
---- RESULTS
|
|
2017-11-27,10
|
|
1399-06-27,2
|
|
9999-12-31,2
|
|
0001-01-01,6
|
|
---- TYPES
|
|
DATE, BIGINT
|
|
====
|
|
---- QUERY
|
|
select id_col, date_part, date_col from date_tbl where date_col = '1399-12-31';
|
|
---- RESULTS
|
|
3,0001-01-01,1399-12-31
|
|
---- TYPES
|
|
INT,DATE,DATE
|
|
====
|
|
---- QUERY
|
|
select count(*) from date_tbl where date_col != '1399-12-31';
|
|
---- RESULTS
|
|
19
|
|
---- TYPES
|
|
BIGINT
|
|
====
|
|
---- QUERY
|
|
select count(*) from date_tbl where date_col = date_part;
|
|
---- RESULTS
|
|
2
|
|
---- TYPES
|
|
BIGINT
|
|
====
|
|
---- QUERY
|
|
select min(date_part), max(date_part), min(date_col), max(date_col) from date_tbl;
|
|
---- RESULTS
|
|
0001-01-01,9999-12-31,0001-01-01,9999-12-31
|
|
---- TYPES
|
|
DATE, DATE, DATE, DATE
|
|
====
|
|
---- QUERY
|
|
select date_part, min(date_col), max(date_col) from date_tbl group by date_part;
|
|
---- RESULTS
|
|
2017-11-27,0001-06-21,2017-11-28
|
|
1399-06-27,2017-11-28,2018-12-31
|
|
9999-12-31,9999-12-01,9999-12-31
|
|
0001-01-01,0001-01-01,9999-12-31
|
|
---- TYPES
|
|
DATE, DATE, DATE
|
|
====
|
|
---- QUERY
|
|
select date_part, count(*) from date_tbl group by date_part;
|
|
---- RESULTS
|
|
2017-11-27,10
|
|
1399-06-27,3
|
|
9999-12-31,2
|
|
0001-01-01,7
|
|
---- TYPES
|
|
DATE, BIGINT
|
|
====
|
|
---- QUERY
|
|
select date_col, count(date_part) from date_tbl group by date_col;
|
|
---- RESULTS
|
|
0001-06-29,1
|
|
0002-01-01,1
|
|
0001-06-27,1
|
|
0001-06-25,1
|
|
1399-12-31,1
|
|
0001-06-23,1
|
|
9999-12-31,2
|
|
0001-12-31,1
|
|
0001-06-21,1
|
|
9999-12-01,1
|
|
2018-12-31,1
|
|
0001-06-26,1
|
|
2017-11-28,3
|
|
0001-06-28,1
|
|
0001-06-22,1
|
|
0001-01-01,1
|
|
0001-06-24,1
|
|
NULL,2
|
|
---- TYPES
|
|
DATE, BIGINT
|
|
====
|
|
---- QUERY
|
|
select date_part, max(date_col) from date_tbl group by date_part
|
|
having max(date_col) > '2017-11-29';
|
|
---- RESULTS
|
|
1399-06-27,2018-12-31
|
|
9999-12-31,9999-12-31
|
|
0001-01-01,9999-12-31
|
|
---- TYPES
|
|
DATE,DATE
|
|
====
|
|
---- QUERY
|
|
select ndv(date_col), distinctpc(date_col),
|
|
distinctpcsa(date_col), count(distinct date_col)
|
|
from date_tbl;
|
|
---- RESULTS
|
|
16,13,14,17
|
|
---- TYPES
|
|
BIGINT,BIGINT,BIGINT,BIGINT
|
|
====
|
|
---- QUERY
|
|
select ndv(date_part), ndv(date_col) from date_tbl;
|
|
---- RESULTS
|
|
4,16
|
|
---- TYPES
|
|
BIGINT,BIGINT
|
|
====
|
|
---- QUERY
|
|
select date_part, ndv(date_col) from date_tbl group by date_part;
|
|
---- RESULTS
|
|
2017-11-27,9
|
|
1399-06-27,2
|
|
9999-12-31,2
|
|
0001-01-01,6
|
|
---- TYPES
|
|
DATE, BIGINT
|
|
====
|
|
---- QUERY
|
|
select date_col, date_part from date_tbl order by 1, 2 limit 5;
|
|
---- RESULTS
|
|
0001-01-01,0001-01-01
|
|
0001-06-21,2017-11-27
|
|
0001-06-22,2017-11-27
|
|
0001-06-23,2017-11-27
|
|
0001-06-24,2017-11-27
|
|
---- TYPES
|
|
DATE,DATE
|
|
====
|
|
---- QUERY
|
|
select date_col, date_part from date_tbl order by 1 desc, 2 desc limit 5;
|
|
---- RESULTS
|
|
NULL,1399-06-27
|
|
NULL,0001-01-01
|
|
9999-12-31,9999-12-31
|
|
9999-12-31,0001-01-01
|
|
9999-12-01,9999-12-31
|
|
---- TYPES
|
|
DATE,DATE
|
|
====
|
|
---- QUERY
|
|
select t1.*, t2.* from date_tbl t1
|
|
join date_tbl t2
|
|
on t1.date_col = t2.date_col
|
|
order by t1.date_col desc, t1.date_part desc, t2.date_part desc limit 5;
|
|
---- RESULTS
|
|
31,9999-12-31,9999-12-31,31,9999-12-31,9999-12-31
|
|
31,9999-12-31,9999-12-31,5,9999-12-31,0001-01-01
|
|
5,9999-12-31,0001-01-01,31,9999-12-31,9999-12-31
|
|
5,9999-12-31,0001-01-01,5,9999-12-31,0001-01-01
|
|
30,9999-12-01,9999-12-31,30,9999-12-01,9999-12-31
|
|
---- TYPES
|
|
INT,DATE,DATE,INT,DATE,DATE
|
|
====
|
|
---- QUERY
|
|
select a.date_col from date_tbl a left semi join date_tbl b on a.date_col = b.date_part;
|
|
---- RESULTS
|
|
0001-01-01
|
|
9999-12-31
|
|
9999-12-31
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
select first_value(date_col)
|
|
over (order by date_part, date_col rows between 2 preceding and current row)
|
|
from date_tbl;
|
|
---- RESULTS
|
|
0001-01-01
|
|
0001-01-01
|
|
0001-01-01
|
|
0001-12-31
|
|
0002-01-01
|
|
1399-12-31
|
|
2017-11-28
|
|
9999-12-31
|
|
NULL
|
|
2017-11-28
|
|
2018-12-31
|
|
NULL
|
|
0001-06-21
|
|
0001-06-22
|
|
0001-06-23
|
|
0001-06-24
|
|
0001-06-25
|
|
0001-06-26
|
|
0001-06-27
|
|
0001-06-28
|
|
0001-06-29
|
|
2017-11-28
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
select histogram(date_col) from date_tbl;
|
|
---- RESULTS
|
|
'0001-01-01, 0001-06-21, 0001-06-22, 0001-06-23, 0001-06-24, 0001-06-25, 0001-06-26, 0001-06-27, 0001-06-28, 0001-06-29, 0001-12-31, 0002-01-01, 1399-12-31, 2017-11-28, 2017-11-28, 2017-11-28, 2018-12-31, 9999-12-01, 9999-12-31, 9999-12-31'
|
|
---- TYPES
|
|
STRING
|
|
====
|
|
---- QUERY
|
|
select appx_median(date_part), appx_median(date_col) from date_tbl;
|
|
---- RESULTS
|
|
2017-11-27,0001-12-31
|
|
---- TYPES
|
|
DATE, DATE
|
|
====
|
|
---- QUERY
|
|
select sample(date_col) from date_tbl;
|
|
---- TYPES
|
|
# Results are unstable, just check that this doesn't crash
|
|
STRING
|
|
====
|
|
---- QUERY
|
|
select lag(date_col, 1) over (order by date_col, date_part) as d, date_col, date_part
|
|
from date_tbl
|
|
order by date_col, date_part;
|
|
---- RESULTS
|
|
NULL,0001-01-01,0001-01-01
|
|
0001-01-01,0001-06-21,2017-11-27
|
|
0001-06-21,0001-06-22,2017-11-27
|
|
0001-06-22,0001-06-23,2017-11-27
|
|
0001-06-23,0001-06-24,2017-11-27
|
|
0001-06-24,0001-06-25,2017-11-27
|
|
0001-06-25,0001-06-26,2017-11-27
|
|
0001-06-26,0001-06-27,2017-11-27
|
|
0001-06-27,0001-06-28,2017-11-27
|
|
0001-06-28,0001-06-29,2017-11-27
|
|
0001-06-29,0001-12-31,0001-01-01
|
|
0001-12-31,0002-01-01,0001-01-01
|
|
0002-01-01,1399-12-31,0001-01-01
|
|
1399-12-31,2017-11-28,0001-01-01
|
|
2017-11-28,2017-11-28,1399-06-27
|
|
2017-11-28,2017-11-28,2017-11-27
|
|
2017-11-28,2018-12-31,1399-06-27
|
|
2018-12-31,9999-12-01,9999-12-31
|
|
9999-12-01,9999-12-31,0001-01-01
|
|
9999-12-31,9999-12-31,9999-12-31
|
|
9999-12-31,NULL,0001-01-01
|
|
NULL,NULL,1399-06-27
|
|
---- TYPES
|
|
DATE, DATE, DATE
|
|
====
|
|
---- QUERY
|
|
# Query return mixed NULL and non-NULL date values.
|
|
select rn,
|
|
case when rn % 2 = 0 then date_part end,
|
|
case when rn % 3 = 0 then date_col end
|
|
from (
|
|
select *, row_number() over (order by date_col, date_part) rn
|
|
from date_tbl) v;
|
|
---- RESULTS
|
|
1,NULL,NULL
|
|
2,2017-11-27,NULL
|
|
3,NULL,0001-06-22
|
|
4,2017-11-27,NULL
|
|
5,NULL,NULL
|
|
6,2017-11-27,0001-06-25
|
|
7,NULL,NULL
|
|
8,2017-11-27,NULL
|
|
9,NULL,0001-06-28
|
|
10,2017-11-27,NULL
|
|
11,NULL,NULL
|
|
12,0001-01-01,0002-01-01
|
|
13,NULL,NULL
|
|
14,0001-01-01,NULL
|
|
15,NULL,2017-11-28
|
|
16,2017-11-27,NULL
|
|
17,NULL,NULL
|
|
18,9999-12-31,9999-12-01
|
|
19,NULL,NULL
|
|
20,9999-12-31,NULL
|
|
21,NULL,NULL
|
|
22,1399-06-27,NULL
|
|
---- TYPES
|
|
BIGINT, DATE, DATE
|
|
====
|
|
---- QUERY
|
|
# TODO: Once DATE type is supported across all fileformats move these tests to join.test.
|
|
select a.date_col from date_tbl a inner join date_tbl b on
|
|
(a.date_col = b.date_col)
|
|
where a.date_part = '2017-11-27';
|
|
---- RESULTS
|
|
0001-06-21
|
|
0001-06-24
|
|
0001-06-26
|
|
0001-06-27
|
|
0001-06-22
|
|
0001-06-25
|
|
0001-06-28
|
|
2017-11-28
|
|
2017-11-28
|
|
0001-06-23
|
|
0001-06-29
|
|
2017-11-28
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
# Implicit conversion tests.
|
|
# Impala returns the same results as Hive 3.1.
|
|
select cast('2012-01-01' as date) in ('2012-01-01 00:00:00'),
|
|
cast('2012-01-01' as date) = '2012-01-01 00:00:00',
|
|
'2012-01-01 00:00:00' = cast('2012-01-01' as date),
|
|
cast('2012-01-01' as date) in ('2012-01-01 00:00:01'),
|
|
cast('2012-01-01' as date) = '2012-01-01 00:00:01',
|
|
'2012-01-01 00:00:01' = cast('2012-01-01' as date),
|
|
cast('2012-01-01' as date) in (cast('2012-01-01 00:00:00' as timestamp)),
|
|
cast('2012-01-01' as date) in (cast('2012-01-01 00:00:01' as timestamp)),
|
|
cast('2012-01-01 00:00:00' as timestamp) in ('2012-01-01'),
|
|
cast('2012-01-01 00:00:01' as timestamp) in ('2012-01-01'),
|
|
cast('2012-01-01 00:00:01' as string) = cast('2012-01-01' as date),
|
|
cast('2012-01-01 00:00:01' as timestamp) = cast('2012-01-01' as date),
|
|
cast('2012-01-01 00:00:00' as timestamp) = cast('2012-01-01' as date);
|
|
---- RESULTS
|
|
true,true,true,true,true,true,true,false,true,false,true,false,true
|
|
---- TYPES
|
|
BOOLEAN,BOOLEAN,BOOLEAN,BOOLEAN,BOOLEAN,BOOLEAN,BOOLEAN,BOOLEAN,BOOLEAN,BOOLEAN,BOOLEAN,BOOLEAN,BOOLEAN
|
|
====
|
|
---- QUERY
|
|
# Impala returns the same results as Hive 3.1.
|
|
select coalesce(null, cast('2012-02-02' as timestamp), cast('2012-02-02' as timestamp)),
|
|
coalesce(cast('2012-01-01' as date), cast('2012-02-02' as timestamp), cast('2012-02-02' as timestamp)),
|
|
if(false, cast('2011-01-01 01:01:01' as timestamp), DATE '1499-02-02'),
|
|
cast('2012-01-01 01:01:01' as date),
|
|
cast('2012-1-1' as date);
|
|
---- RESULTS
|
|
2012-02-02 00:00:00,2012-01-01 00:00:00,1499-02-02 00:00:00,2012-01-01,2012-01-01
|
|
---- TYPES
|
|
TIMESTAMP,TIMESTAMP,TIMESTAMP,DATE,DATE
|
|
====
|
|
---- QUERY
|
|
# Impala returns the same results as PostgreSQL.
|
|
select coalesce('2012-01-01', cast('2012-02-02' as timestamp), cast('2012-02-02' as timestamp)),
|
|
coalesce('2012-01-01', cast('2012-02-02' as date), cast('2012-02-02' as timestamp));
|
|
---- RESULTS
|
|
2012-01-01 00:00:00,2012-01-01 00:00:00
|
|
---- TYPES
|
|
TIMESTAMP,TIMESTAMP
|
|
====
|
|
---- QUERY
|
|
# Test that conversion fails because function call resolves to YEAR(TIMESTAMP).
|
|
select year('0009-02-15');
|
|
---- RESULTS
|
|
NULL
|
|
---- TYPES
|
|
INT
|
|
====
|
|
---- QUERY
|
|
# Test that invalid casts fail with the right error.
|
|
# DATE->TIMESTAMP conversion fails because date is out of the valid range.
|
|
select cast(date '1399-12-31' as timestamp);
|
|
---- CATCH
|
|
UDF ERROR: Date to Timestamp conversion failed. The valid date range for the Timestamp type is 1400-01-01..9999-12-31.
|
|
====
|
|
---- QUERY
|
|
# STRING->DATE conversion fails because date string is invalid.
|
|
select cast('not-a-date' as date);
|
|
---- CATCH
|
|
UDF ERROR: String to Date parse failed. Invalid string val: "not-a-date"
|
|
====
|
|
---- QUERY
|
|
# Basic test for FORMAT clause in CAST().
|
|
select cast("2014-11-01" as date format "YYYY-MM-DD");
|
|
---- RESULTS
|
|
2014-11-01
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
# Shuffle the pattern elements in the input.
|
|
select cast("02-11-2014" as date format "dd-mm-yyyy");
|
|
---- RESULTS
|
|
2014-11-02
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
# Don't accept time tokens for date when format is provided.
|
|
select cast("2014-11-03 10" as date format "YYYY-MM-DD HH12");
|
|
---- CATCH
|
|
PARSE ERROR: Time tokens provided with date type.
|
|
====
|
|
---- QUERY
|
|
# Input doesn't match the format.
|
|
select cast("2014-11-04" as date format "MM-DD-YYYY");
|
|
---- CATCH
|
|
UDF ERROR: String to Date parse failed.
|
|
====
|
|
---- QUERY
|
|
# Interchangeability of separators.
|
|
select cast("2014/11/05" as date format "YYYY-MM-DD");
|
|
---- RESULTS
|
|
2014-11-05
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
select cast("2014/- ,11'/:-05" as date format "YYYY-MM-DD");
|
|
---- RESULTS
|
|
2014-11-05
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
# Day of year tests.
|
|
select cast("2014 001" as date format "YYYY DDD");
|
|
---- RESULTS
|
|
2014-01-01
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
select cast("365 2014" as date format "DDD-YYYY");
|
|
---- RESULTS
|
|
2014-12-31
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
select cast("366 2014" as date format "DDD-YYYY");
|
|
---- CATCH
|
|
UDF ERROR: String to Date parse failed.
|
|
====
|
|
---- QUERY
|
|
# Leap year with day of year token.
|
|
select cast("2000-366" as date format "YYYY DDD");
|
|
---- RESULTS
|
|
2000-12-31
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
select cast("2000 367" as date format "YYYY DDD");
|
|
---- CATCH
|
|
UDF ERROR: String to Date parse failed.
|
|
====
|
|
----QUERY
|
|
# Leap year with day of year token before 1400.
|
|
select cast('0004 100' as date format "YYYY DDD");
|
|
---- RESULTS
|
|
0004-04-09
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
# Test how missing year digits are filled from current year.
|
|
SET NOW_STRING="2019-01-01 11:11:11";
|
|
select cast("095-01-31" as date FORMAT "YYYY-MM-DD");
|
|
---- RESULTS
|
|
2095-01-31
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
SET NOW_STRING="2019-01-01 11:11:11";
|
|
select cast("95-01-30" as date FORMAT "YYYY-MM-DD");
|
|
---- RESULTS
|
|
2095-01-30
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
SET NOW_STRING="2019-01-01 11:11:11";
|
|
select cast("5-01-29" as date FORMAT "YYYY-MM-DD");
|
|
---- RESULTS
|
|
2015-01-29
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
SET NOW_STRING="2019-01-01 11:11:11";
|
|
select cast("95-01-28" as date FORMAT "YYY-MM-DD");
|
|
---- RESULTS
|
|
2095-01-28
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
SET NOW_STRING="2019-01-01 11:11:11";
|
|
select cast("5-01-27" as date FORMAT "YYY-MM-DD");
|
|
---- RESULTS
|
|
2015-01-27
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
SET NOW_STRING="2019-01-01 11:11:11";
|
|
select cast("5-01-26" as date FORMAT "YY-MM-DD");
|
|
---- RESULTS
|
|
2015-01-26
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
# RRRR with 4-digit year falls back to YYYY
|
|
SET NOW_STRING="2019-01-01 11:11:11";
|
|
select cast("2017-01-25" as date FORMAT "RRRR-MM-DD");
|
|
---- RESULTS
|
|
2017-01-25
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
# RRRR with 3-digit year fills digits from current year
|
|
SET NOW_STRING="2019-01-01 11:11:11";
|
|
select cast("017-01-24" as date FORMAT "RRRR-MM-DD");
|
|
---- RESULTS
|
|
2017-01-24
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
# RRRR with 1-digit year fills digits from current year
|
|
SET NOW_STRING="2019-01-01 11:11:11";
|
|
select cast("7-01-23" as date FORMAT "RRRR-MM-DD");
|
|
---- RESULTS
|
|
2017-01-23
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
# RR with 1-digit year fills digits from current year
|
|
SET NOW_STRING="2019-01-01 11:11:11";
|
|
select cast("7-01-22" as date FORMAT "RR-MM-DD");
|
|
---- RESULTS
|
|
2017-01-22
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
# Round year when last 2 digits of current year is less than 50
|
|
SET NOW_STRING="2049-01-01 11:11:11";
|
|
select cast("49-01-21" as date FORMAT "RRRR-MM-DD");
|
|
---- RESULTS
|
|
2049-01-21
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
SET NOW_STRING="2049-01-01 11:11:11";
|
|
select cast("50-01-20" as date FORMAT "RRRR-MM-DD");
|
|
---- RESULTS
|
|
1950-01-20
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
SET NOW_STRING="2000-01-01 11:11:11";
|
|
select cast("49-01-19" as date FORMAT "RR-MM-DD");
|
|
---- RESULTS
|
|
2049-01-19
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
SET NOW_STRING="2000-01-01 11:11:11";
|
|
select cast("50-01-18" as date FORMAT "RR-MM-DD");
|
|
---- RESULTS
|
|
1950-01-18
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
# Round year when last 2 digits of current year is greater than 49
|
|
SET NOW_STRING="2050-01-01 11:11:11";
|
|
select cast("49-01-17" as date FORMAT "RRRR-MM-DD");
|
|
---- RESULTS
|
|
2149-01-17
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
SET NOW_STRING="2050-01-01 11:11:11";
|
|
select cast("50-01-16" as date FORMAT "RRRR-MM-DD");
|
|
---- RESULTS
|
|
2050-01-16
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
SET NOW_STRING="2099-01-01 11:11:11";
|
|
select cast("49-01-15" as date FORMAT "RR-MM-DD");
|
|
---- RESULTS
|
|
2149-01-15
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
SET NOW_STRING="2099-01-01 11:11:11";
|
|
select cast("50-01-14" as date FORMAT "RR-MM-DD");
|
|
---- RESULTS
|
|
2050-01-14
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
# In a date to string cast round year act like regular 'YYYY' or 'YY' tokens.
|
|
# select date_col from date_tbl where id_col = 4;
|
|
# 2017-11-28
|
|
select cast(date_col as string format "RRRR RR") from date_tbl where id_col = 4;
|
|
---- RESULTS
|
|
'2017 17'
|
|
---- TYPES
|
|
STRING
|
|
====
|
|
---- QUERY
|
|
# Date to string conversion using all but round year tokens.
|
|
select cast(date_col as string format "YYYY YYY YY Y MM DD DDD") from date_tbl
|
|
where id_col = 4;
|
|
---- RESULTS
|
|
'2017 017 17 7 11 28 332'
|
|
---- TYPES
|
|
STRING
|
|
====
|
|
---- QUERY
|
|
# Time tokens not allowed with date type.
|
|
select cast(date_col as string format "YYYY-MM-DD HH12") from date_tbl
|
|
where id_col = 4;
|
|
---- CATCH
|
|
PARSE ERROR: Time tokens provided with date type.
|
|
====
|
|
---- QUERY
|
|
# Boundary tests with FORMAT clause
|
|
select cast("0001-01-01" as date FORMAT "YYYY-MM-DD");
|
|
---- RESULTS
|
|
0001-01-01
|
|
====
|
|
---- QUERY
|
|
select cast("9999-12-31" as date FORMAT "YYYY-MM-DD");
|
|
---- RESULTS
|
|
9999-12-31
|
|
====
|
|
---- QUERY
|
|
# Cast NULL string to date
|
|
select cast(cast(NULL as string) as date format "YYYY-MM-DD");
|
|
---- RESULTS
|
|
NULL
|
|
---- TYPES
|
|
DATE
|
|
====
|
|
---- QUERY
|
|
# Cast NULL date to string
|
|
select cast(cast(NULL as date) as string format "YYYY-MM-DD");
|
|
---- RESULTS
|
|
'NULL'
|
|
---- TYPES
|
|
STRING
|
|
====
|